C#MailMessage AlternateView忽略TransferEncoding

时间:2017-02-14 13:09:55

标签: c# calendar mailmessage quoted-printable alternateview

我们以多种语言从我们的系统发送日历邀请。 (英语,西班牙语,德语等) 最近我们添加了Georgian并且正在发出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视图显示位置正确显示但卡不显示。 enter image description here

2 个答案:

答案 0 :(得分:0)

设置public class Filters extends DefaultHttpFilters { @Inject public Filters(GzipFilter gzip, LoggingFilter logging) { super(gzip, logging); } } 是不够的;您必须单独为所有备用视图设置nextFilter

MailMessage.BodyEncoding

答案 1 :(得分:0)

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

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

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