0

我们从我们的系统以多种语言发送日历邀请。(英语、西班牙语、德语等)最近我们添加了格鲁吉亚语,并且正在解决 MailMessage 的编码问题。

例如,电子邮件中的“თბილისი”以“თáƒ'áƒ~ლáƒ~სáƒ~”的形式到达

我们发送的电子邮件包括一个 HTML AlternateView 和一个文本/日历 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 的编码,但似乎没有一个能正确输出格鲁吉亚文本。

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

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

谢谢!

以下是 Gmail 中显示内容的示例。HTML 视图显示位置正确显示,但卡片没有。 在此处输入图像描述

4

2 回答 2

0

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

var calendarView = AlternateView.CreateAlternateViewFromString(body, new ContentType("text/calendar"));
calendarView.ContentType.CharSet = Encoding.UTF8.WebName;
msg.AlternateViews.Add(calendarView);
于 2017-02-14T13:33:36.760 回答
0

事实证明这与我上面的代码无关。

我们使用第 3 方提供商发送电子邮件 (PostmarkApp)。他们在发送前将所有文本/日历附件/替代视图转换为 7 位。结果,非 ASCII 字符最终会被破坏。

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

于 2017-02-21T11:19:37.620 回答