【发布时间】:2010-10-04 22:07:24
【问题描述】:
我正在尝试通过 Outlook.MailItem 使用 C# 3 发送 HTML 格式的电子邮件
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 Property 的文档说“当 BodyFormat 属性从 RTF 切换到 HTML 时,所有文本格式都会丢失,反之亦然”。
遗憾的是,似乎没有一种简单的方法可以将MailItem.Attachements 中每个Attachment 的Type 更改为OlAttachmentType.olByValue,因为它是在您创建Attachment 时设置的只读属性。
想到的一种方法是遍历 HTML,用标记替换 标记,并以编程方式遍历 <img>MailItem 文本,插入 Outlook.Attachment 的 Type OlAttachmentType.olByValue。
另一种选择是将 链接转换为使用<img> 并将图像添加为具有引用身份的附件。src="cid:uniqueIdN"
所以,对于这个问题...有没有办法将链接图像转换为嵌入图像,最好不要使用第三方工具,如 Redemption?转换为 RTF 恰好会产生结果,但这样做绝不是先决条件,而且显然可能会失去保真度 - 我只是想让它正常工作:D 我现有的想法对我来说听起来都不干净。
【问题讨论】:
标签: html image rtf attachment outlook-object-model