我有一个在SQL Integration Services上运行的服务,该服务可读取邮箱,并将已阅读的电子邮件转发给其他收件人,当使用Outlook编辑器手动添加内嵌图像时,所有工作均正常(拖放或插入图像) 。但是,当使用VBA创建电子邮件并插入图像作为附件并在从EWS读取消息时将其命名为“ cid”时,它不会将图像识别为嵌入式图像。
[这是使用Outlook编辑器发送电子邮件并使用“插入图像”按钮插入图像时,我的应用从EWS读取电子邮件(NormalizedBody)的方式:(我跳过了其他html标签,仅显示了“ img”标签):
<img src=\"cid:[email protected]\" width=\"135\" height=\"166\" id=\"Imagem_x0020_1\">
<img src=\"cid:[email protected]\" width=\"135\" height=\"166\" id=\"Imagem_x0020_2\">
<img src=\"cid:[email protected]\" width=\"135\" height=\"166\" id=\"Imagem_x0020_3\">
和'image001'的附件属性为例:
ContentId:“ [email protected]”
IsInline:true
现在,如果我使用带有以下代码的Outlook VBA创建电子邮件:
Dim olApp As Outlook.Application
Dim olMail As Outlook.MailItem
Set olApp = New Outlook.Application
Set olMail = olApp.CreateItem(olMailItem)
olMail.To = "[email protected]"
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:null
IsInline:假
也许,如果我使用Outlook Client打开此电子邮件,则邮件正文正确显示图像。
但是,如果我尝试创建一条消息转发(CreateForward()),则图像变成附件(不是内联的,并且图像的cid位置显示为损坏。
我认为问题在于使用VBA代码而不是从EWS读取图像时将图像插入消息的方式是否正确?是否有更好的方法使用“ cid”和嵌入式图像创建电子邮件?
谢谢,对英语错误表示抱歉。
olMail.Attachments.Add "C:\Users\Public\_testeMailing\Image001.png", olByValue, 1, "Image001"
olMail.Attachments.Add "C:\Users\Public\_testeMailing\Image002.png", olByValue, 2, "Image002"
您设置的位置参数仅在主体为rtf时才有效https://docs.microsoft.com/en-us/office/vba/api/outlook.attachments.add ref(此参数仅适用于使用RTF的电子邮件格式:这是附件应放置的位置在邮件的正文中。头寸的值为1参数指定附件应位于邮件正文的开头。值'n'大于电子邮件项目正文中的字符指定附件应该放在最后。值为0将隐藏附件。