Является ли .Net MailMessage автоматически складывать поля заголовка длиннее максимальной длины RFC2822? - PullRequest
2 голосов
/ 23 августа 2010

См. RFC 2822 , разделы 2.1.1 и 2.2.3, чтобы начать

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

Мысли?

1 Ответ

4 голосов
/ 23 августа 2010

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

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

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

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

...