使用 System.Net.Mail.MailMessage
类我创建了一封电子邮件。该电子邮件是德语的,需要包含变音符号 ü。为此,我将对象的 SubjectEncoding
属性声明为 Encoding.UTF8
。
收到电子邮件后,我注意到 ü 已被两个 specials character 取代在三个邮件应用程序之一(GMX webmail)中。它在 Office Outlook 和苹果邮件应用程序中有效。
将主题行从下方插入 this decoder 时问题是可重现的。
我开始调查并在电子邮件的元数据中找到了主题行。
Subject: =?utf-8?B?Qk9PVCBUZXN0OiBFcmZvbGdyZWljaGUgQW5tZWxkdW5nIGbD?=
=?utf-8?B?vHIgZGllIEJlcnVmc2Vya3VuZHVuZw==?=
主题包含两部分,分别对 header 的第一部分和第二部分进行编码。奇怪的是,它将主题一分为二的点是在 ü 的位置。
我现在不太确定在这种情况下谁有错。 .Net 是否错误地构建了编码的主题行,或者网络邮件/解码器网站是否存在错误?它只是对 RFC 或多或少的严格解释吗? ?
最佳答案
更新(感谢 AnFi's answer):您刚好破坏了 ü
多字节字符 内部 的 base64,使其无效。
您要查找的 RFC 是 RFC 2047 , “MIME(多用途 Internet 邮件扩展)第三部分:非 ASCII 文本的消息头扩展”。
关于该测试系统的注意事项:它不会尝试强制执行规范(您可以输入原始 ü
字符,尽管违反了 RFC 5322,它仍会在没有警告的情况下显示;这在该页面上的“不打算用作验证器”段落)。
这是一个在多字节字符之外被破坏的 base64 编码:
Subject: =?utf-8?B?Qk9PVCBUZXN0OiBFcmZvbGdyZWljaGUgQW5tZWxk?=
=?utf-8?B?dW5nIGbDvHIgZGllIEJlcnVmc2Vya3VuZHVuZwo=?=
这是一个 Quoted-Printable为你编码。我发现这些对于像德语这样偶尔使用非 ASCII 字符的语言更易读:
Subject: BOOT Test: Erfolgreiche Anmeldung =?utf-8?Q?f=C3=BCr?= die
Berufserkundung
关于.net - 这是一个损坏的主题行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49011647/