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,并使用正确的编码发送电子邮件。
关于这个问题,我和他们有公开的票。
我们从我们的系统发送多种语言的日历邀请。 (英语、西班牙语、德语等) 最近我们添加了 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,并使用正确的编码发送电子邮件。 关于这个问题,我和他们有公开的票。