c# - MailKit smtp.office365.com特殊字符编码问题

标签 c# email smtp office365 mailkit

首先,我不知道我的问题是否来自 Mailkit(顺便说一下,这是一个很棒的软件)的错误使用,或者 smtp.office365.com 的错误配置。

MailKit的版本是:2.6.0

我尝试在主题和文本正文中使用此字符串Test d'ênvoïe d'èmail avec des àccénts发送消息。

当我使用 smtp.office365.com 帐户发送电子邮件时,当我在 Office 365 邮箱中收到邮件时,主题很好,但正文看起来像这样 Test d'�nvo�ed '�通过邮件发送 �cc�nts

我尝试使用另一家公司的另一个 smtp.office365.com 帐户,当我在 Office 365 邮箱中收到它时,主题和正文都很好。

我尝试使用第一个 smtp 帐户将同一封电子邮件发送到 GMAIL 电子邮箱。主体和 body 都很好。

所以我不知道是否第一个 smtp 帐户配置错误,或者 Outlook(桌面版和网页版)有问题?

发送电子邮件的代码非常简单,没有使用任何花哨的东西。每天都会使用此代码从我们的软件发送电子邮件,这是我们第一次在 smtp 中遇到此类问题。令我困扰的是,它是一个 Office 365 smtp,就像我们每天使用的那样,没有任何问题。

--- 编辑 根据 @jstedfast 的要求,这里是 MimeKit/MailKit 生成的原始 MIME

From: <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="57323a363e3b1733383a363e397934383a" rel="noreferrer noopener nofollow">[email protected]</a>
Date: Tue, 26 May 2020 14:16:13 +0000
Subject: Test =?utf-8?b?ZCfDqm52b8OvZSBkJ8OobWFpbCBhdmVjIGRlcyDDoGNjw6ludHM=?=
Message-Id: <54G3D036QAU4.3G654QDV2MVS2@4b245b0f83f4>
To: <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0774686a6247626a666e6b2964686a" rel="noreferrer noopener nofollow">[email protected]</a>
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="=-xjuWE0kh6/lmMc7JIcMJ3g=="

--=-xjuWE0kh6/lmMc7JIcMJ3g==
Content-Type: text/plain; charset=utf-8

Test d'ênvoïe d'èmail avec des àccénts ça, ~ $ #{][*µµ$£= +
--=-xjuWE0kh6/lmMc7JIcMJ3g==
Content-Type: text/html; charset=utf-8
Content-Id: <RUL3D036QAU4.Y7K3UPECLV0Q3@4b245b0f83f4>

Test d'ênvoïe d'èmail avec des àccénts ça, ~ $ #{][*µµ$£= +
--=-xjuWE0kh6/lmMc7JIcMJ3g==--

最佳答案

jdweng在他的评论中建议,这可能是接收 Outlook 客户端中的字体问题(换句话说,Outlook 使用的字体没有 êï 的字形, èàé)。

由于每个字符没有出现 2 个垃圾符号,如 ��(或 À�),这表明 MailKit 使用的是 iso-8859 等字符编码-1(或 iso-8859-15?)并且接收 Outlook 客户端也使用单字节字符编码对其进行解码...或者 MailKit 使用 UTF-8 接收Outlook 客户端正确地将其识别为 UTF-8(UTF-8 在拉丁字母中每个重音字符使用 2 个字节),但由于字体问题而无法显示字形。

如果您没有明确设置 MailKit 在邮件正文中使用的字符编码,则默认为 UTF-8(这表明存在字体问题)。

这是一个示例,说明如何指定要在 MimeKit/MailKit 中使用的字符编码:

var body = new TextPart ("plain");
body.SetText ("Test d'ênvoïe d'èmail avec des àccénts", Encoding.GetEncoding ("iso-8859-1"));

所以我想这给我们留下了一个问题:如何创建消息(特别是消息正文)?

如果您可以分享 MimeKit/MailKit 生成的原始 MIME,那将会很有帮助。

为此,您可以使用 MimeMessage.WriteTo(string fileName) 方法,然后使用您喜欢的文本编辑器打开文件并复制和粘贴内容。

关于c# - MailKit smtp.office365.com特殊字符编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62018794/

相关文章:

java - 使用java发送简单的电子邮件

email - 使用 msmtp 通过终端发送邮件工作正常,但不适用于 php mail()

c# - .NET 的事件机制

c# - 将 WPF DrawingGroup 呈现为单个 ImageSource

node.js - 邮件监听器2 - 连接结束

HTML 电子邮件仅在 Thunderbird 中未正确对齐

c# - 这是什么意思 GoAsync(() => GetPackagesExecute(serviceType));在 C# 中?

c# - 我如何使用 NUnit 创建一个通用的 BaseTest,我可以从它继承并从 base 运行测试?

java - 如何在java中将邮件作为另一封邮件的附件发送而不将其保存到磁盘

.net - 在 .NET 中通过 GMail 发送电子邮件