.Net MailMessage автоматически сворачивает поля заголовка, длина которых превышает максимальную длину RFC2822?

Для начала см. RFC 2822, разделы 2.1.1 и 2.2.3.

Сворачивает ли System.Net.Mail.MailMessage автоматически поля заголовков, если их содержимое превышает ограничения максимальной длины? RFC2822 указывает, что поле заголовка не должно превышать 998 символов в строке. Чтобы обойти это, можно вставить CRLF, чтобы поле заголовка занимало более одной строки.

Мысли?


person Dan Appleyard    schedule 23.08.2010    source источник


Ответы (1)


Класс MailMessage не выполняет автоматического свертывания, по крайней мере, до тех пор, пока он не будет отправлен с использованием класса SmtpClient. Только когда сообщение отправлено, .NET выполняет автоматическое свертывание полей заголовка для создания сообщения MIME. Вы можете проверить это, открыв MailMessage.Headers после отправки сообщения.

Свертывание может происходить в нескольких местах в зависимости от того, нужно ли предварительно кодировать поле заголовка. Например, если тема содержит символы, отличные от US-ASCII, она должна быть закодирована в кодировке Base64 или Q. В этом случае классы, отвечающие за кодирование, также выполняют свертывание.

Если вы используете Reflector, вы можете взглянуть, например, на класс MailWriter, который является одним из классов, выполняющих свертывание, и который, по крайней мере, в .NET 2.0, использует рекомендуемое ограничение строки по умолчанию в 78 символов в строке, как указано в RFC2822.

Каждая строка символов ДОЛЖНА содержать не более 998 символов, и ДОЛЖНА быть не более 78 символов, исключая CRLF.

person João Angelo    schedule 23.08.2010