C# MailMessage AlternateView игнорирует TransferEncoding

Мы отправляем приглашения из календаря из нашей системы на нескольких языках. (Английский, испанский, немецкий и т. Д.) Недавно мы добавили грузинский и у нас возникла проблема с кодировкой MailMessage.

Например, "თბილისი" в электронном письме приходит как "თáƒ'ილისი"

Письмо, которое мы отправляем, включает в себя HTML AlternateView и текст / календарь AlternateView. У меня оба AlternateViews TransferEncoding установлен в QuotedPrintable.

Он работает правильно для представления HTML, но не для представления календаря. Он всегда отправляется как 7bit.

В моем SmtpClient Я поставил DeliveryFormat = SmtpDeliveryFormat.International

Вот как я добавляю AlternateView:

var iCalInvite = InterviewService.CreateICALInvite(uniqueId, model.StartTimeUTC, model.EndTimeUTC, model.Location, model.Note, personCompany.Person.Email, personCompany.Person.FullName, interviewAttendee, model.Attendees, msg, _currentUser);

iCalInvite.TransferEncoding = System.Net.Mime.TransferEncoding.QuotedPrintable;
msg.AlternateViews.Add(iCalInvite);

Это результат просмотра HTML

Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Это неверный вывод календаря

Content-Type: text/calendar; method=REQUEST; charset=UTF-8;
Content-Transfer-Encoding: 7bit

Я пытался установить кодировку MailMessage в нескольких комбинациях, но ни одна из них не выводит грузинский текст правильно.

MailMessage msg = new MailMessage();
msg.BodyTransferEncoding = System.Net.Mime.TransferEncoding.QuotedPrintable;
msg.BodyEncoding = Encoding.UTF8;

Любая помощь направления будет принята с благодарностью. Я часами пробовал разные комбинации кодирования, но безрезультатно.

Спасибо!

Вот пример того, что появляется в Gmail. HTML-представление отображается местоположение отображается правильно, но карта не. введите описание изображения здесь

2 ответа

Решение

Оказывается, это не имеет ничего общего с моим кодом выше.

Мы используем стороннего поставщика для отправки электронных писем (PostmarkApp). Они преобразуют все текстовые / календарные вложения / альтернативные представления в 7-битные перед отправкой. В результате символы, не входящие в ASCII, в итоге будут искажены.

Я изменил данные SMTP на Gmail и отправил письмо с правильной кодировкой. У меня есть открытый билет с ними по вопросу.

Настройка MailMessage.BodyEncoding просто не достаточно; Вы должны установить CharSet для всех альтернативных видов отдельно.

var calendarView = AlternateView.CreateAlternateViewFromString(body, new ContentType("text/calendar"));
calendarView.ContentType.CharSet = Encoding.UTF8.WebName;
msg.AlternateViews.Add(calendarView);
Другие вопросы по тегам