SmtpClient/MailMessage上的主题编码

Xav*_*nas 8 .net smtp mailchimp mandrill

我正在尝试使用SmtpClientMailMessage类发送包含非ASCII字符的电子邮件.

我正在使用外部邮件服务(MailChimp),我的一些电子邮件已被其SMTP服务器拒绝.我联系了他们,这是他们回复的内容:

主题行似乎是Base64编码,然后是Quoted-Printable编码,通常应该没问题,但其中一个字符被分成两行.因此,当您的主题行有点长时,为了正确处理,它会被分为两行.当在主题行中使用UTF-8引用可打印时,不应该在行之间断开字符串.相反,应该缩短一行,以便将完整的字符串保持在一起.在这种情况下,没有发生这种情况,因此表示单个字符的字符串在多行中被破坏,因此无法有效地使用UTF-8引用 - 可打印编码.

有问题的主题如下:

Subject: XXXXXXX - 5 personnes vous ont nommé guide
Run Code Online (Sandbox Code Playgroud)

在UTF-8/Base64中:

Subject: WFhYWFhYWCAtIDUgcGVyc29ubmVzIHZvdXMgb250IG5vbW3DqSBndWlkZQ==
Run Code Online (Sandbox Code Playgroud)

因为该标头将超过某个最大长度(我不确定它是Quoted-Printable编码及其每行76个字符的限制,还是SMTP标头限制),在编码和拆分后,标题将变为:

Subject: =?utf-8?B?WFhYWFhYWCAtIDUgcGVyc29ubmVzIHZvdXMgb250IG5vbW3D?=
 =?utf-8?B?qSBndWlkZQ==?=
Run Code Online (Sandbox Code Playgroud)

显然,这会在解码时导致问题(因为第一行无法解码为有效字符串).我不确定我是否完全理解这个问题,我有以下问题:

  • 为什么是?utf-8?B?部分重复?QP编码不应该在分割线之前发生,因此它的标题不应该重复吗?
  • 在QP解码之后,我们不应该得到有效的1行Base64字符串吗?
  • 在第二行的开头有一个空间,它在QP编码之外,这可能是问题吗?
  • 编码器坏了,还是解码器?

另请注意,其他一些SMTP服务器将接受此消息,但这并不意味着它有效.

作为一种解决方法,我尝试禁用Base64编码,这显然是不必要的,但MailMessage类具有控制此编码的BodyTransferEncoding属性,但仅适用于消息的正文部分.没有属性似乎控制主题的"转移"编码.

Xav*_*nas 5

这被证实是MSDN论坛中的一个错误:http:
//social.msdn.microsoft.com/Forums/vstudio/en-US/4d1c1752-70ba-420a-9510-8fb4aa6da046/subject-encoding-on-smtpclientmailmessage

并且在Microsoft Connect上提交了一个错误:https: //connect.microsoft.com/VisualStudio/feedback/details/785710/mailmessage-subject-incorrectly-encoded-in-utf-8-base64

一种解决方法是将MailMessage的SubjectEncoding设置为其他编码,例如ISO-8859-1.在这种情况下,主题将在Quoted Printable(而不是Base64)中进行编码,以避免出现此问题.