【问题标题】:Include image from website in mailitem.HTMLBody在 mailitem.HTMLBody 中包含来自网站的图像
【发布时间】:2014-12-05 22:25:50
【问题描述】:

我目前正在为 Microsoft Outlook 开发一个加载项,该加载项在 html 正文的标记之前添加一个图像。此图像位于远程服务器上,因此图像标签的来源是http://someserver.com/image.jpg

这在新电子邮件(又名新电子邮件)上完全符合预期 但是,当用户点击回复或转发时,由于某种原因,图像源会更改为 cid:image001.jpg,而实际的图像源会放入 alt 标记中。

我正在更改发送事件的正文,因为我希望在电子邮件写入完成后添加图像。

在发送事件中运行的代码

void OutlookApplication_ItemSend(object Item, ref bool Cancel)
    {

        if (Item is Outlook.MailItem)
        {
            Outlook.MailItem mailItem = (Outlook.MailItem)Item;

            string image = "<img src='http://someserver.com/attach.jpg' width=\"100\" height=\"225\" alt=\"\" />";
            string body = mailItem.HTMLBody;

            body = body.Replace("</body>", image + "</body>");

            mailItem.BodyFormat = Outlook.OlBodyFormat.olFormatHTML;
            mailItem.HTMLBody = body;
        }
    }

【问题讨论】:

  • 包含内嵌图像的正确方法是使用 ContentId(cid)。发生的情况是图像实际上是电子邮件上的常规附件,然后由您看到的这个 cid 前缀引用。这样,图像就可以在本地使用,并且不需要托管在某个地方。如果您随后发送该消息并且 gmail 中的某人查看它,gmail 会自动将 cid 转换为链接,以便消息在浏览器中正确显示。
  • 此外,您可能正在寻找与此处 social.msdn.microsoft.com/Forums/vstudio/en-US/… 类似的解决方案
  • 我不是在尝试嵌入图像,而是在尝试使用链接图像,即网络托管图像。出于我的目的,静态附加图像将不起作用。正如我在原始帖子中所说,使用新的电子邮件可以正常工作,在回复或转发期间,html 被解析并且我的图像 src 被更改
  • 我明白是什么但不明白为什么。 Outlook 处理它的方式有什么问题?您尚未描述您的自定义用例是什么。
  • 为什么不重要,但如果它能让你感觉更好,我可以给你一个例子。假设我正在发送一封电子邮件,其中包含在您打开电子邮件之前可能会更改的产品图片。这样做的唯一方法是托管映像并在更新时根据需要进行更改。无论哪种方式,我曾经使用过的每种语言都允许我创建一个适当的 html 电子邮件,其中包含托管在网站上的图像。即使在一个干净的发送 Outlook 允许我这样做。唯一不起作用的是当我使用回复或转发时

标签: c# outlook-addin


【解决方案1】:

所以我找到了一种可行的方法。我最终要做的是创建一个新的 mailItem,将现有的 mailitem 复制到其中,修改并发送该项目并取消原始邮件。以下代码显示了我是如何做到的:

void OutlookApplication_ItemSend(object Item, ref bool Cancel)
    {

        if (Item is Outlook.MailItem)
        {
            Outlook.Inspector currInspector;
            currInspector = outlookApplication.ActiveInspector();
            Outlook.MailItem oldMailItem = (Outlook.MailItem)Item;
            Outlook.MailItem mailItem = oldMailItem.Copy();
            string image = "<img src='http://someserver.com/attach.jpg' width=\"1\" height=\"1\" alt=\"\" />";
            string body = mailItem.HTMLBody;

            body = body.Replace("</body>", image+"</body>");

            mailItem.BodyFormat = Outlook.OlBodyFormat.olFormatHTML;
            mailItem.HTMLBody = body;

            mailItem.Send();
            Cancel = true;
            currInspector.Close(Outlook.OlInspectorClose.olDiscard);
        }
    }

【讨论】:

    【解决方案2】:

    我建议在 ... 元素中添加图像。您可以在以下系列文章中阅读更多有关 HTML 呈现功能的信息:

    Word 在最新的 Outlook 版本中用作电子邮件编辑器。

    您对 ItemSend 事件处理程序有任何疑问吗?有用吗?

    【讨论】:

    • 我在 ItemSend 事件期间附加了 img 标签,它在新电子邮件上工作正常。问题是在回复期间它尝试嵌入图像而不是使用我提供的 src,也就是说图像的网址。我不想嵌入或附加图像,因为这不适用于我的特定情况
    猜你喜欢
    • 2018-11-13
    • 2021-08-14
    • 2016-03-11
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多