mime 格式的文件在出现换行符时会丢失点

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 内的电子邮件中。

这是怎么回事?我该如何解决这个问题?

svi*_*ick 5

这看起来您没有正确编码 SMTP 的电子邮件文本。来自维基百科:

由于消息正文可以包含仅包含句点的行作为文本的一部分,因此每当一行以句点开头时,客户端都会发送两个句点;相应地,服务器将行开头的两个句点的每个序列替换为单个句点。这种转义方法称为点填充。

基本上,每当您想在行首写一个句点时,您都​​必须写两个句点。

  • 不,`QuotedPrintableEncoder` 使用引用打印编码正确地对文本进行编码。但它不知道您将使用该文本进行 SMTP,这会添加自己的点填充。点填充是 SMTP 特有的,与 MIME 或引用打印无关。 (2认同)
  • 我宁愿说 **SMTP 客户端(或接收它的服务器)已损坏**。它的责任是进行点填充。当然不是用户、QuotedPrintableEncoder 或 MIME 解析器。 (2认同)