从Outlook以外的应用程序发送时,内嵌图像出现EWS问题

问题描述 投票:0回答:1

我有一个在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”和嵌入式图像创建电子邮件?

谢谢,对英语错误表示抱歉。

c# html vba outlook exchangewebservices
1个回答
0
投票
在线

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将隐藏附件。

我建议您尝试使用https://social.msdn.microsoft.com/Forums/vstudio/en-US/6c063b27-7e8a-4963-ad5f-ce7e5ffb2c64/how-to-embed-image-in-html-body-in-c-into-outlook-mail?forum=vsto中的答案

© www.soinside.com 2019 - 2024. All rights reserved.