这是一个损坏的主题行吗?
Is this a broken subject line?
使用 System.Net.Mail.MailMessage
class 我创建了一封电子邮件。该电子邮件是德语的,需要包含变音符号 ü。为此,我将 object 的 SubjectEncoding
属性 声明为 Encoding.UTF8
。
收到电子邮件后,我注意到 ü 在三个邮件应用程序(GMX 网络邮件)之一中已被两个 specials character 取代。它在 Office Outlook 和苹果邮件应用程序中有效。
将下面的主题行插入 this decoder 时,问题会重现。
我开始调查并在电子邮件的元数据中找到了主题行。
Subject: =?utf-8?B?Qk9PVCBUZXN0OiBFcmZvbGdyZWljaGUgQW5tZWxkdW5nIGbD?=
=?utf-8?B?vHIgZGllIEJlcnVmc2Vya3VuZHVuZw==?=
主题包含两部分,分别编码 header 的第一部分和第二部分。奇怪的是,它将主题一分为二的点位于 ü 的位置。
我现在不太确定在这种情况下谁有错。 .Net 是否错误地构建了编码的主题行,或者 webmail/decoder 网站中是否存在错误?它只是对 RFC 的严格解释吗?
更新(感谢 AnFi's answer):你刚刚破坏了 inside ü
多字节字符的 base64 ,使它无效。
您要查找的 RFC 是 RFC 2047、“MIME(多用途 Internet 邮件扩展)第三部分:消息 Header Non-ASCII 文本的扩展” .
关于该测试系统的注意事项:它不会尝试强制执行规范(您可以输入原始 ü
字符,尽管违反了 RFC 5322,它仍会在没有警告的情况下显示;这在该页面上的“不打算用作验证器”段落)。
这是在多字节字符之外损坏的 base64 编码:
Subject: =?utf-8?B?Qk9PVCBUZXN0OiBFcmZvbGdyZWljaGUgQW5tZWxk?=
=?utf-8?B?dW5nIGbDvHIgZGllIEJlcnVmc2Vya3VuZHVuZwo=?=
这里有一个 Quoted-Printable 编码给你。我发现这些对于像德语这样偶尔使用 non-ASCII 个字符的语言更易读:
Subject: BOOT Test: Erfolgreiche Anmeldung =?utf-8?Q?f=C3=BCr?= die
Berufserkundung
看起来像一个错误报告[我不使用net/vb.net]
RFC2047 : Message Header Extensions for Non-ASCII Text
Each 'encoded-word' MUST represent an integral number of characters.
A multi-octet character may not be split across adjacent 'encoded-
word's.
使用 System.Net.Mail.MailMessage
class 我创建了一封电子邮件。该电子邮件是德语的,需要包含变音符号 ü。为此,我将 object 的 SubjectEncoding
属性 声明为 Encoding.UTF8
。
收到电子邮件后,我注意到 ü 在三个邮件应用程序(GMX 网络邮件)之一中已被两个 specials character 取代。它在 Office Outlook 和苹果邮件应用程序中有效。
将下面的主题行插入 this decoder 时,问题会重现。
我开始调查并在电子邮件的元数据中找到了主题行。
Subject: =?utf-8?B?Qk9PVCBUZXN0OiBFcmZvbGdyZWljaGUgQW5tZWxkdW5nIGbD?=
=?utf-8?B?vHIgZGllIEJlcnVmc2Vya3VuZHVuZw==?=
主题包含两部分,分别编码 header 的第一部分和第二部分。奇怪的是,它将主题一分为二的点位于 ü 的位置。
我现在不太确定在这种情况下谁有错。 .Net 是否错误地构建了编码的主题行,或者 webmail/decoder 网站中是否存在错误?它只是对 RFC 的严格解释吗?
更新(感谢 AnFi's answer):你刚刚破坏了 inside ü
多字节字符的 base64 ,使它无效。
您要查找的 RFC 是 RFC 2047、“MIME(多用途 Internet 邮件扩展)第三部分:消息 Header Non-ASCII 文本的扩展” .
关于该测试系统的注意事项:它不会尝试强制执行规范(您可以输入原始 ü
字符,尽管违反了 RFC 5322,它仍会在没有警告的情况下显示;这在该页面上的“不打算用作验证器”段落)。
这是在多字节字符之外损坏的 base64 编码:
Subject: =?utf-8?B?Qk9PVCBUZXN0OiBFcmZvbGdyZWljaGUgQW5tZWxk?=
=?utf-8?B?dW5nIGbDvHIgZGllIEJlcnVmc2Vya3VuZHVuZwo=?=
这里有一个 Quoted-Printable 编码给你。我发现这些对于像德语这样偶尔使用 non-ASCII 个字符的语言更易读:
Subject: BOOT Test: Erfolgreiche Anmeldung =?utf-8?Q?f=C3=BCr?= die
Berufserkundung
看起来像一个错误报告[我不使用net/vb.net]
RFC2047 : Message Header Extensions for Non-ASCII Text
Each 'encoded-word' MUST represent an integral number of characters. A multi-octet character may not be split across adjacent 'encoded- word's.