2011-11-11 36 views
1

我写了一封邮件处理程序,它基本上在接收邮件上打了一个模板并转发它。传入邮件转到一个Gmail帐户,我使用POP下载,然后阅读邮件(包括html和纯文本multipart-MIME),根据需要对模板进行任何更改,然后使用相应的plain + html创建一个新邮件文本并将其发送到另一个地址。电子邮件中的奇怪字符

问题是,当邮件到达另一边时,一些邮件已被破坏,奇怪的字符如ÃÂ奇迹般地被插入。他们不在原始邮件中,他们不在我的模板中,而且我无法找到任何可预测的模式来显示这些人物出现的时间。我确定这与邮件的编码属性有关,但我确保将外发邮件的charset和传输编码设置为与传入邮件相同。那么我还需要做什么?

编辑:下面是一个收到的邮件的剪断样品:

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的那不是在原来的)。

那么你认为在这里发生了什么?

另一条线索:这里是我的代码,创建了不同的观点:

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

沿着什么@mjwills建议,也许CreateAlternativeViewFromString()方法已经假定UTF-8的线,后来将其更改为ISO -8859-1没有什么区别?

+2

这听起来像是一个编码问题。发布您发送的消息以及由此产生的乱码消息的示例。您应该在流程的每个阶段查看邮件的二进制形式。 – Mankarse

+0

@Mankarse - 查看我的编辑 –

回答

2

所以每个= 0A变成= 0D = 0A。 而且每个= A0变成= C2 = A0。

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

我的猜测是,即使你已经指定了charset,单独的东西的行被视为UTF8。

您可能想尝试使用CreateAlternateViewFromString的this form,其中ContentType.CharSet设置得当。

+0

查看我的编辑 - “另一个线索” –

+0

CreateAlternateViewFromString的另一个签名使其更糟糕。现在整个multipart-MIME结构变得混乱起来,使整个电子邮件显示为附件! –

+0

向我们展示您尝试的备用代码。 – mjwills