【问题标题】:EWS problem with inline images when sent from app other than Outlook从 Outlook 以外的应用程序发送内嵌图像时出现 EWS 问题
【发布时间】: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


    【解决方案1】:

    排队

    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(

    此参数仅适用于使用富文本的电子邮件 格式:是附件应该放置的位置 在消息的正文中。位置值为 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的答案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-04
      • 1970-01-01
      • 2011-03-22
      • 2018-01-24
      • 2022-11-21
      • 2017-05-28
      • 2020-02-14
      相关资源
      最近更新 更多