【发布时间】:2020-05-03 10:30:12
【问题描述】:
我有一个在 SQL 集成服务上运行的服务,该服务读取邮箱,并将读取的电子邮件转发给其他收件人,当使用 Outlook 编辑器手动添加内联图像(拖放或插入图像)时,所有工作都很好)。 但是,当使用 VBA 创建电子邮件并将图像作为附件插入并在从 EWS 读取消息时将其命名为“cid”时,它不会将图像识别为内联图像。
当使用 Outlook 编辑器发送电子邮件并使用插入图像按钮插入图像时,这就是我的应用程序从 EWS 读取电子邮件(NormalizedBody)的方式:(我跳过了其他 html 标记,仅显示“img”标记):
<img src=\"cid:image001.png@01D5CC5D.4C661140\" width=\"135\" height=\"166\" id=\"Imagem_x0020_1\">
<img src=\"cid:image002.png@01D5CC5D.4C661140\" width=\"135\" height=\"166\" id=\"Imagem_x0020_2\">
<img src=\"cid:image003.png@01D5CC5D.4C661140\" width=\"135\" height=\"166\" id=\"Imagem_x0020_3\">
以“image001”的附件属性为例:
ContentId:“image001.png@01D5CC5D.4C661140”
IsInline:真
现在,如果我使用带有此代码的 Outlook VBA 创建电子邮件:
Dim olApp As Outlook.Application
Dim olMail As Outlook.MailItem
Set olApp = New Outlook.Application
Set olMail = olApp.CreateItem(olMailItem)
olMail.To = "TelemetriaCubosOperacCIV@correio.itau.com.br"
olMail.Subject = "VBA MAIL TEST"
olMail.Attachments.Add "C:\Users\Public\_testeMailing\Image001.png", olByValue, 1, "Image001"
olMail.Attachments.Add "C:\Users\Public\_testeMailing\Image002.png", olByValue, 2, "Image002"
olMail.Attachments.Add "C:\Users\Public\_testeMailing\Image003.png", olByValue, 3, "Image003"
olMail.BodyFormat = olFormatHTML
Dim strHTML As String
strHTML = "<table><tr>" & _
"<td><img src='cid:Image001.png' /></td>" & _
"<td><img src='cid:Image002.png' /></td>" & _
"<td><img src='cid:Image003.png' /></td>" & _
"</tr></table>"
olMail.HTMLBody = strHTML
olMail.Send
从 EWS 读取 NormalizedBody 时,HTML img 标签显示如下:
<img src=\"cid:342EA5ED2B36174FA24B4FFE34AD84FA@1\">
<img src=\"cid:37448D8F2D450541A18641D2EE5BB152@1\">
<img src=\"cid:3E2CFE241DBFF943B815142BC3631890@1\">
而image001的属性是:
ContentId:空
IsInline:假
也许,如果我使用 Outlook 客户端打开这封电子邮件,邮件正文会正确显示图像。
但是,如果我尝试创建消息转发 (CreateForward()),图像会变成附件(不是内联),并且图像的 cid 定位显示已损坏。
我认为问题在于使用 VBA 代码而不是从 EWS 读取时将图像插入消息的方式,这是正确的吗?有没有更好的方法来使用“cid”和内嵌图像创建电子邮件?
谢谢,对于英文错误,我们深表歉意。
【问题讨论】:
标签: c# html vba outlook exchangewebservices