SMTP точка - кто это делает и кто это убирает - PullRequest
4 голосов
/ 23 января 2012

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

Исследованием я обнаружил, что во всех таких случаях две точки находятся в начале строки цитируемого печатаемого HTML.

При чтении RFC 2821 я вижу, что это, вероятно, происходит из-за заполнения точек. Мой вопрос в основном таков: кто должен делать набивку точек и кто должен ее удалять?

Если мы возьмем простую последовательность, мы получим следующее:

  A ----> B ----> C ----> D

где A - отправляющий клиент, B - SMTP-сервер, на который A отправляет почту, C - SMTP-сервер получателя, а D - получающий клиент.

RFC 2821, кажется, говорит, что A должен добавить дополнительную точку, если линия начинается с точки, и B должен удалить ее (что имеет смысл для меня). Однако на практике я наблюдаю, что B добавляет точку, если A забывает, но в противном случае ничего не делает. Письма, прибывающие в D, не удалили лишнюю точку. Я неправильно понял RFC, и поэтому работа D состоит в том, чтобы удалить лишнюю точку?

1 Ответ

7 голосов
/ 28 ноября 2012

Пожалуйста, обратитесь к разделу 4.5.2 стандарта SMTP RFC2821:

http://tools.ietf.org/html/rfc2821#section-4.5.2

позволяет прозрачно передавать весь текст, составленный пользователем, используются следующие процедуры:

  • Перед отправкой строки почтового текста SMTP-клиент проверяет первый символ строки.Если это период, один дополнительный период вставляется в начало строки.

  • Когда SMTP-сервер получает строку почтового текста, он проверяет эту строку.Если строка состоит из одного периода, она рассматривается как индикатор конца письма.Если первый символ - точка, а в строке есть другие символы, первый символ удаляется.

...