【问题标题】:C# MailMessage AlternateView ignoring TransferEncodingC# MailMessage AlternateView 忽略 TransferEncoding
【发布时间】:2017-07-02 19:06:33
【问题描述】:

我们从我们的系统以多种语言发送日历邀请。 (英语、西班牙语、德语等) 最近我们添加了格鲁吉亚语,并且出现了 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 视图显示位置正确显示,但卡片没有。

【问题讨论】:

    标签: c# calendar mailmessage quoted-printable alternateview


    【解决方案1】:

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

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

    【讨论】:

    • 感谢 taffer - 我已经尝试过您的建议,但结果仍然相同。我在问题中添加了一张图片,以显示它在 Gmail 中的显示方式。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-07-19
      • 2016-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多