Настройка кодировки для каждой части MailMessage - PullRequest
0 голосов
/ 26 июля 2010

Я нацеливаюсь на приложение .NET для международного рынка, и мне нужно реализовать функцию отправки почты.Я заметил, что в классе MailMessage есть несколько вариантов установки кодировки:

Я добавил раскрывающийся список в приложенииСтраница конфигурации, чтобы выбрать кодировку почтового сообщения.

Рекомендуется ли для каждого свойства в MailMessage использовать эту кодировку?Будут ли почтовые серверы и клиенты по всему миру справляться с этим?Или только некоторые должны быть установлены таким образом?

1 Ответ

2 голосов
/ 24 октября 2010

Краткий ответ будет нет .

Теперь я собираюсь уточнить почему .Правильно оформленное почтовое сообщение i18n поддерживает следующие функции:

  • Поддержка интернационализированных доменных имен (IDNA) для заголовков From и To (а также CC, BCC, Reply-To и т. Д.)
  • Узнаваемое и безопасное кодирование Subject и других заголовков
  • Правильное кодирование тела

В настоящее время доменные имена i18n-ed являются базовыми строками ASCII, закодированными с помощью Punycode (вы можетеПодробнее об этом читайте в RFC 3492 , RFC 5891 и RFC 5890 ).Короче говоря, вы должны использовать класс IdnMapping для преобразования из строки UTF-16 в ASCII (что можно сделать, вызвав метод GetAscii().

С помощью безопасного кодирования строки темы и других (не адресные) заголовки, я имел в виду, что на данный момент он все еще должен быть 7-битным безопасным, так как довольно много старых и устаревших агентов пересылки почты не поддерживают здесь 8-битные кодировки. Поэтому вы можете фактически поддержать выбор пользователяздесь, но если пользователь выбирает что-то вроде ISO-8859-x, KOI-8-x или Shift-JIS, я бы порекомендовал дополнительно кодировать заголовки, используя алгоритм Quoted Printable или Base64, просто для уверенности. Если пользователь выбирает UTF-8Вы можете кодировать заголовки с помощью UTF-7, а также QP или B64.

И последнее, но не менее важное: вы можете и даже должны поддерживать выбранную пользователем кодировку для тела сообщения электронной почты. Однако, если это 16-битовая база (например, UCS2 или UTF-16), я бы порекомендовал установить Transfer Encoding на что-то вроде Base64.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...