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);