Файл в формате MIME теряет точки, когда они появляются на переносах строк - PullRequest
1 голос
/ 25 октября 2011

Я пишу файл сообщения электронной почты в формате MIME, содержащий HTML. Я пишу HTML-часть файла MIME следующим образом:

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));

В 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 />

Обратите внимание на домен //xxxxxshow.xxxpoint.com, который занимает разрыв строки в файле MIME. Когда этот домен попадает в Outlook, он «потерял первую точку, поэтому он читает xxxxshowxxxpoint.com, тогда как он должен читать xxxxxshow.xxxpoint.com. Если произошел разрыв строки, так что точка - это самый первый символ на следующей строке, точка теряется и теряется в источнике сообщения электронной почты, когда оно поступает в Outlook. Если разрыв строки происходит на полпути через слово «xxxxxshow», то точка не теряется и появляется в электронном письме в пределах перспективы.

Что происходит и как это исправить?

1 Ответ

3 голосов
/ 25 октября 2011

Похоже, вы неправильно кодируете текст сообщения электронной почты для SMTP. Из Википедии :

Поскольку тело сообщения может содержать строку, состоящую только из точки, как часть текста, клиент отправляет два периода каждый раз, когда строка начинается с периода; соответственно, сервер заменяет каждую последовательность из двух периодов в начале строки одним. Такой метод экранирования называется точечная начинка .

По сути, всякий раз, когда вы хотите написать точку в начале строки, вы должны написать вместо нее два периода.

...