smtp.office365.com вопросы кодирования темы

Я пытаюсь отправлять электронные письма со своей выделенной учетной записью office365, но у меня возникают проблемы с кодированием темы - все мои специальные символы заменяются на "?".

Код, который я использую, довольно прост и отлично работает с другой тестовой учетной записью на smtp-mail.outlook.com.

using (var mailMsg = new MailMessage(sender, recipient))
{
    mailMsg.IsBodyHtml = true;
    mailMsg.Subject = "Hello world żółćąź";
    mailMsg.Body = body;

    using (var smtpClient = new SmtpClient())
    {
        smtpClient.Credentials = new NetworkCredential("email", "password");
        smtpClient.EnableSsl = true;
        smtpClient.Host = "smtp.office365.com";
        smtpClient.Port = 587;

        await smtpClient.SendMailAsync(mailMsg);
    }
}

Я попытался установить все возможные предметные коды без удачи. Также преобразование строки объекта в Base64String также не работает. Также пытался установить кодировку заголовка Content-Type... Все найденные разрешения не помогли мне. Может быть, это какая-то конкретная проблема SmtpClient, реализованная только с office365?

А также установка кодировки тела не помогла

mailMsg.BodyEncoding = Encoding.UTF8;

3 ответа

У меня была такая же проблема со счетом моей компании. Вот мои выводы на данный момент:

Похоже, что почтовые серверы Office365 включили SMTPUTF8 расширение несколько месяцев назад, которое меняет поведение System.Net.Mail.SmtpClient Класс для отправки различных команд SMTP и другой полезной нагрузки DATA.

В моем случае сообщение всегда доставлялось бы нормально при отправке на другую учетную запись Office365, но для других учетных записей мы получали уведомления об отказах по электронной почте от удаленного SMTP-сервера, который принял ретранслированное сообщение электронной почты от Office365. Ошибка была что-то вроде "Получены неверные данные, ожидаемые 7-битные безопасные символы". Таким образом, я мог представить, что удаленный SMTP-сервер из OP мог бы молча заменить все символы за пределами 7-битного диапазона с низким знаком на вопросительный знак.

Отправка через GMail (который также имеет SMTPUTF8 расширение активно) проблем не было.

До сих пор я не отлаживал SmtpClient Ссылочные источники еще предстоит увидеть, что отправляется на сервер Office365. Таким образом, коренной причиной может быть SmtpClient отправляет хорошее сообщение о том, какой Office365 "портит" перед ретрансляцией, а какой GMail отправляет без проблем; или же SmtpClient создает неверный сеанс сообщений / SMTP, который Office365 молча принимает и пересылает на удаленные SMTP-серверы, но который GMail принимает и исправляет на лету перед передачей.

В любом случае, я использовал библиотеки MailKit и MimeKit, используя NuGet, и вместо этого использую их для отправки своих электронных писем. Они предлагают протоколирование протокола SMTP для устранения неполадок и, по-видимому, решают указанную проблему путем правильной отправки SMTPUTF8 а также 8BITMIME Флаги, как определено в RFC 6531. Требуется дополнительная работа для чтения конфигурации из обычного расположения Web.config или App.config, но библиотеки делают эту работу.

Если вы хотите продолжать использовать SmtpClient тогда вам следует либо связаться с Microsoft (это их служба и среда выполнения.NET), либо запустить собственный частный SMTP-сервер без SMTPUTF8 расширение, которое передает на удаленные серверы. В последнем случае SmtpClient должен правильно кодировать все заголовки и полезную нагрузку (хотя это означает, что вы не сможете использовать International значение для DeliveryFormat свойство, когда вы хотите отправить людям с интернационализированным адресом электронной почты).

Установите кодировку почтового сообщения так, чтобы она поддерживала символы, которые вы используете, так как по умолчанию us-ascii:

mailMsg.BodyEncoding = Encoding.UTF8;

У нас была такая же проблема с SMTP-сервером Office365 с использованием библиотеки vmime. Мы решили это, отключив SMTPUTF8, таким образом, всегда кодируя не-ascii символы.

Как указано выше JBert, тот же протокол работает с SMTP-серверами GMail.

Другие вопросы по тегам