Jou*_*man 1 c# encoding mime file
我正在编写一个包含 html 的 mime 格式的电子邮件文件。我正在编写 mime 文件的 html 部分,如下所示:
writer.WriteLine("--" + altBoundary);
writer.WriteLine("Content-Type: text/html; charset=\"UTF-8\"");
writer.WriteLine("Content-Transfer-Encoding: quoted-printable");
writer.WriteLine();
QuotedPrintableEncoder qpEncoder=new QuotedPrintableEncoder();
writer.WriteLine(qpEncoder.Encode(HTMLBody));
Run Code Online (Sandbox Code Playgroud)
在 HTMLBody 中我有一大块 html。其中一个片段如下所示:
<p><br />Dear Ben,<br /><br />
Thank you for your interest in our products and services.
=
=20
</p>
<p>Here are some literature links you may find interesting:<=
/p>
<ul><li><a title=3D"Brochure One" href=3D"http://xxxxxshow=
.xxxpoint.com/Document?client=3DXxxxxxpoint&document=3DBrochure One">Broch=
ure One</a></li></ul>
Regards,<br />
Run Code Online (Sandbox Code Playgroud)
请注意 //xxxxxshow.xxxpoint.com 域,它跨越 mime 文件中的换行符。当此域到达 Outlook 时,它“丢失了第一个点”,因此它读取的是 xxxxshowxxxpoint.com,而它应该读取的是 xxxxxshow.xxxpoint.com。如果发生换行,使得该点成为下一行的第一个字符,则该点会“丢失”,并且当电子邮件到达 Outlook 时,该点会从电子邮件源中丢失。如果换行符出现在“xxxxxshow”一词的中间,则该点不会丢失,并且它确实会出现在 Outlook 内的电子邮件中。
这是怎么回事?我该如何解决这个问题?
这看起来您没有正确编码 SMTP 的电子邮件文本。来自维基百科:
由于消息正文可以包含仅包含句点的行作为文本的一部分,因此每当一行以句点开头时,客户端都会发送两个句点;相应地,服务器将行开头的两个句点的每个序列替换为单个句点。这种转义方法称为点填充。
基本上,每当您想在行首写一个句点时,您都必须写两个句点。