Понять конец передачи сообщения электронной почты в SMTP

У меня есть журнал простой SMTP-транзакции. (Это немного длинновато, откройте его здесь). Он показывает обмен низкоуровневыми рукопожатиями, такими как HELO, MAIL и т. Д.

Когда сервер, который должен получать электронное письмо, готов принять данные электронной почты, он отправляет следующее (строка 12 в журнале):

RawSmtp Information: 0 : << 354 Start mail input; end with <CRLF>.<CRLF>

Однако конец передачи немного сбивает с толку (строки 74/75):

RawSmtp Information: 0 : >> cannot foresee
RawSmtp Information: 0 : >> 
RawSmtp Information: 0 : << 250 OK

что при просмотре в блокноте выглядит так:

введите описание изображения здесь

Однако код просто написан так:

                            WriteResponse(writer, "354 Start mail input; end with <CRLF>.<CRLF>");
                            string line;
                            while ((line = reader.ReadLine()) != null && line != ".")
                            {
                                //do stuff
                            }

Это стандарт? Я имею в виду отправить что-то вроде <CRLF>.<CRLF> и проверять только точку (_7 _) ...?


person deostroll    schedule 20.03.2015    source источник


Ответы (1)


Он проверяет всю строку, в которой есть только .. Это стандартный метод обозначения конца раздела DATA. См. здесь.

Кроме того, как указывает @jstedfast, метод StreamReader.ReadLine() удаляет "\r\n" последовательность конца строки из строк, которые он возвращает, поэтому в этом случае результирующая строка будет "."

person Donal    schedule 20.03.2015
comment
Просто чтобы немного уточнить ваш ответ: метод StreamReader.ReadLine () удаляет последовательность конца строки "\r\n" из строк, которые он возвращает, поэтому в этом случае результирующая строка будет ".". - person jstedfast; 22.03.2015