SMTP: rnr (без второго n) как двойной перевод строки

#smtp #newline #rfc

#smtp #перевод строки #rfc

Вопрос:

У меня есть анализатор SMTP, который работает в основном нормально. Существует проблема при получении трафика от стороннего программного обеспечения, которое отправляет двойные новые строки как «r n r» (без второго » n»). В настоящее время такие соединения завершаются как несоответствующие SMTP. Может кто-нибудь объяснить, что именно RFC говорит о таких «забавных» двойных переводах строк? Могу ли я предположить, что программное обеспечение, которое отправляет подобные данные, делает что-то действительно неправильно?

Ответ №1:

RFC2821. Раздел 2.3.7:

Команды SMTP и
данные сообщений, если они не изменены служебным расширением, передаются «строками». Строки состоят из нуля или более
символов данных, заканчивающихся последовательным символом ASCII «CR» (шестнадцатеричное значение 0D), за которым сразу следует символ ASCII «LF» (шестнадцатеричное значение 0A).

http://www.ietf.org/rfc/rfc2821.txt

—Дэйв

Комментарии:

1. Позже в RFC говорится: «Реализации SMTP-клиента НЕ ДОЛЖНЫ передавать эти символы, за исключением случаев, когда они предназначены как терминаторы строки, а затем ДОЛЖНЫ, как указано выше, передавать их только в виде последовательности <CRLF>». Поскольку RFC явно требует <CRLF>, я думаю, можно с уверенностью предположить, что понимание приложения, которое отправляет данные с помощью <CRLFCR>, не требуется. Я все еще не вижу причины, по которой приложение отправляет новые строки забавными способами.

Ответ №2:

Различные операционные системы имеют различные представления символов новой строки. Проверьте приведенные здесь инструкции по символам новой строки.. Кстати, среди программистов распространена практика совместного использования n и r для предотвращения любых конфликтов в системе. Вам нужно проверить, какой символ новой строки поддерживается вашей системой. Если это r , то вы получаете оба требуемых символа. Но если это n , то ошибка связана с отправителем.

Комментарии:

1. Я действительно прочитал википедию, прежде чем спрашивать, вот почему я спрашиваю. Я вижу причину принять n n и r r и r n r n как двойной перевод строки, но r n r выглядит просто странно. Сначала используется новая строка Windows, а сразу после нее — новая строка MacOS9. Проблема с » r n r» заключается в том, что вы не знаете, сколько там новых строк. Три? Два? полтора?