C# MailMessage AlternateView 忽略 TransferEncoding

C# MailMessage AlternateView ignoring TransferEncoding

我们从我们的系统发送多种语言的日历邀请。 (英语、西班牙语、德语等) 最近我们添加了 Georgian 并且正在发布 MailMessage 的编码。

例如,电子邮件中的“თბილისი”到达时为“თბáƒ∼ლáƒ∼სáƒ∼'

我们发送的电子邮件包括一个 HTML AlternateView 和一个 text/calendar AlternateView。 我将两个 AlternateViews TransferEncoding 都设置为 QuotedPrintable。

它适用于 HTML 视图但不适用于日历视图。它总是以 7 位发送。

在我的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 的编码,但 none 似乎可以正确输出格鲁吉亚文本。

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

任何方向的帮助将不胜感激。 我花了几个小时尝试各种编码组合都无济于事。

谢谢!

这是 Gmail 中显示的示例。 HTML 视图显示位置正确显示,但卡片没有。

仅仅设置MailMessage.BodyEncoding是不够的;您必须分别为所有备用视图设置 CharSet

var calendarView = AlternateView.CreateAlternateViewFromString(body, new ContentType("text/calendar"));
calendarView.ContentType.CharSet = Encoding.UTF8.WebName;
msg.AlternateViews.Add(calendarView);

原来和我上面的代码没有关系

我们使用第 3 方提供商发送电子邮件 (PostmarkApp)。 他们在发送前将所有 text/calendar attachments/alternative 视图转换为 7 位。结果,non-ASCII 个字符最终会被破坏。

我将 SMTP 详细信息更改为 Gmail,并使用正确的编码发送电子邮件。 关于这个问题,我和他们有公开的票。