电子邮件中的奇怪字符

时间:2011-11-11 09:55:52

标签: c# email mime

我编写了一个邮件处理程序,它基本上会在传入的邮件上打一个模板并将其转发。接收邮件进入我使用POP下载的Gmail帐户,然后我读取邮件(html和纯文本multipart-MIME),对模板进行必要的更改,然后使用相应的plain + html创建新邮件文本并将其发送到另一个地址。

麻烦的是,当邮件到达另一边时,一些邮件被破坏了,奇怪的字符如ÃÂ神奇地插入了。它们不在原始邮件中,它们不在我的模板中,而且我找不到任何可预测的模式来确定这些字符何时出现。我确定它与邮件的编码属性有关,但我确保将外发邮件的字符集和传输编码设置为与传入邮件相同。那我还需要做什么呢?

编辑:以下是传入邮件的剪切示例:

Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable

=0A=0ASafari Special:=0A=0A=A0=0A=0ASafari in Thornybush Priv=
ate Game Reserve 9-12=0AJanuary 2012 (3nights)

处理完毕后,结果如下:

Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

=0D=0A=0D=0ASafari Special:=0D=0A=0D=0A=C2=A0=0D=0A=0D=0A=
Safari in Thornybush Private Game Reserve 9-12=0D=0AJanuary=
2012 (3nights)

请注意=0D=C2字符的插入(除了少数=0A以外的字符)。

那么您认为这里发生了什么?

另一个CLUE:以下是我创建备用视图的代码:

var htmlView = AlternateView.CreateAlternateViewFromString(htmlBody, null, "text/html");
htmlView.ContentType.CharSet = charSet;
htmlView.TransferEncoding = transferEncoding;
m.AlternateViews.Add(htmlView);

根据@mwwills的建议,也许CreateAlternativeViewFromString()方法已经假定为UTF-8,稍后将其更改为iso-8859-1并没有什么区别?

1 个答案:

答案 0 :(得分:2)

因此每个= 0A变为= 0D = 0A。 并且每个= A0变为= C2 = A0。

前者看起来可能与Carriage Return / Line Feeds有关。 后者看起来可能与What is "=C2=A0" in MIME encoded, quoted-printable text?有关。

我的猜测是,即使你已经指定了字符集,但只有一些东西可以将它视为UTF8。

您可能想尝试使用Create this form的CreateAlternateViewFromString,其中ContentType.CharSet已正确设置。