mimekit outlook将文本显示为附件

时间:2016-09-25 19:11:27

标签: c# outlook mhtml mimekit

我有一个word文档并使用Aspose.Word执行邮件合并并将结果保存为内存流mhtml(我的代码的一部分):

Aspose.Words.Document doc = new Aspose.Words.Document(documentDirectory + countryLetterName);
doc.MailMerge.Execute(tempTable2);
MemoryStream outStream = new MemoryStream();
doc.Save(outStream, Aspose.Words.SaveFormat.Mhtml);

然后我使用MimeKit(NuGet的最新版本)发送消息:

outStream.Position = 0;
MimeMessage messageMimeKit = MimeMessage.Load(outStream);
messageMimeKit.From.Add(new MailboxAddress("<sender name>", "<sender email"));
messageMimeKit.To.Add(new MailboxAddress("<recipient name>", "<recipient email>"));
messageMimeKit.Subject = "my subject";
using (var client = new MailKit.Net.Smtp.SmtpClient())
{
    client.Connect(<smtp server>, <smtp port>, true);
    client.Authenticate("xxxx", "pwd");
    client.Send(messageMimeKit);
    client.Disconnect(true);
}

在我的邮件网络客户端打开收到的电子邮件时,我会看到文字(带图片)和图片作为附件。

在Outlook(2016)中打开收到的电子邮件时,邮件正文为空,我有两个附件,1个包含文本,1个包含图像。

查看mht内容本身,它看起来像:

MIME-Version: 1.0
Content-Type: multipart/related;
    type="text/html";
    boundary="=boundary.Aspose.Words=--"

This is a multi-part message in MIME format.

--=boundary.Aspose.Words=--
Content-Disposition: inline;
    filename="document.html"
Content-Type: text/html;
    charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: document.html

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; charset=
=3Dutf-8" /><meta http-equiv=3D"Content-Style-Type" content=3D"text/css" />=
<meta name=3D"generator" content=3D"Aspose.Words for .NET 14.1.0.0" /><titl=
e></title></head><body>
*****body removed *****
</body></html>

--=boundary.Aspose.Words=--
Content-Disposition: inline;
    filename="image.001.jpeg"
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-Location: image.001.jpeg

****image content remove****

--=boundary.Aspose.Words=----

是否有一些格式化或我必须这样才能在Outlook中正确显示?或者它是由找到的“3D”关键字引起的,例如content = 3D“xxxx”,style = 3D“xxxx”?

提前致谢。

爱德华

1 个答案:

答案 0 :(得分:0)

=3D位是quoted-printable字符的=编码。由于标题正确地将Content-Transfer-Encoding声明为quoted-printable,因此不存在问题。

以下是一些关于尝试将内容按摩到适用于Outlook的内容的建议(Outlook非常挑剔):

MimeMessage messageMimeKit = MimeMessage.Load(outStream);
messageMimeKit.From.Add(new MailboxAddress("<sender name>", "<sender email"));
messageMimeKit.To.Add(new MailboxAddress("<recipient name>", "<recipient email>"));
messageMimeKit.Subject = "my subject";

var related = (MultipartRelated) messageMimeKit.Body;
var body = (MimePart) related[0];

// It's possible that the filename on the HTML body is confusing Outlook.
body.FileName = null;

// It's also possible that the Content-Location is confusing Outlook
body.ContentLocation = null;