2015-03-20 2 views
1

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

Когда сервер, который должен получить электронное письмо, готов принять данные электронной почты, он отправляет следующее (строка 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 

, которая, если смотреть в блокноте выглядит следующим образом:

enter image description here

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

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

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

ответ

2

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

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

+0

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

Смежные вопросы