2

我正在尝试通过 C# 3 发送 HTML 格式的电子邮件Outlook.MailItem

Outlook.MailItem objMail = (Outlook.MailItem)olkApp.CreateItem(Outlook.OlItemType.olMailItem);
objMail.To = to;
objMail.Subject = subject;
objMail.HTMLBody = htmlBody;

电子邮件是通过从 RTF 控件(TX 文本控件)保存而在外部生成的,该控件生成 HTML,其中包含指向存储在<<FileName>>_files 子目录中的图像的链接。例子:

<img border="0" src="file:///C:/Documents%20and%20Settings/ItsMe/Local%20Settings/Temp/2/zbt4dmvs_Images/zbt4dmvs_1.png" width="94" height="94" alt="[image]">

以这种方式发送电子邮件会生成链接损坏的邮件。

使用 Outlook 2007 作为电子邮件客户端和 Word 作为电子邮件编辑器,切换到 RTF(选项选项卡、格式选项卡组)可以保留布局内联图像。

通过以下方式以编程方式执行此操作:

var oldFormat = objMail.BodyFormat;
objMail.BodyFormat = Outlook.OlBodyFormat.olFormatRichText;
objMail.BodyFormat = oldFormat;

丢失格式并破坏图像(图像成为[image]屏幕上的链接标记,可单击但不再显示图像)。这并不奇怪,因为MailItem.BodyFormat 属性的文档说“当属性从 RTF 切换到 HTML 时,所有文本格式都会丢失,BodyFormat反之亦然”。

可悲的是,似乎没有一种简单的方法来更改 to 中的each Type,因为它是在创建.AttachmentMailItem.AttachementsOlAttachmentType.olByValueAttachment

想到的一种方法是遍历 HTML,用标记替换<img>标签并以编程方式遍历MailItem文本,插入一个Outlook.Attachmentof Type OlAttachmentType.olByValue.

另一种选择是转换<img>要使用的链接src="cid:uniqueIdN"并将图像添加为具有引用身份的附件。

那么,对于这个问题......有没有办法将链接图像转换为嵌入图像,最好不要进入第三方工具,如 Redemption?转换为 RTF 碰巧会产生结果,但这样做绝不是先决条件,而且显然可能会失去保真度 - 我只是想让它正常工作:D 我现有的想法对我来说听起来都不干净。

4

2 回答 2

1

由于您使用的是 .net > 2.0,因此您可能需要查看 System.Net.Mail 命名空间以创建邮件消息。我发现它非常可定制,并且非常易于用于与您类似的任务。我遇到的唯一问题是确保我使用了正确的编码,并且我必须使用 HTML 表格进行布局(css 无法正常工作)。这里有一些链接向您展示它是如何工作的......

如果这不是一个选项,那么我建议使用 Content ID 路线并将图像嵌入为附件。您的另一个选择是在网站上公开托管图像,并将 html 中的图像链接更改为公共图像。

您应该意识到 HTML 电子邮件很容易看起来像垃圾邮件,并且可以被电子邮件服务器和客户端视为垃圾邮件。即使是那些仅供内部使用的(它发生在我身上)也可能最终出现在 Outlook 的垃圾邮件文件夹中。

于 2009-02-02T13:12:52.680 回答
0

DOH!,实际上在 Outlook 2007 中发送电子邮件会强制图像嵌入。

8K 的已发送项目大小比我看到的 60K (RTF) 的草稿大小与 1K 的草稿大小(尚未转换为 RTF 并再次返回的 HTML)小得多。

所以它一直在做我的意思。Grr。

我将把 Q 和 A 留在这里,以防它帮助有同样困惑的心态的人。

顺便说一句,我在旅途中发现了一些有用的链接:

发送电子邮件示例

一般问答网站以及其他质量不同的示例

于 2009-02-02T13:12:59.857 回答