2017-02-14 80 views
0

我們以多種語言從我們的系統發送日曆邀請。 (英文,西班牙文,德文等) 最近我們加了格魯吉亞語,並且正在發佈MailMessage的編碼。C#MailMessage AlternateView忽略TransferEncoding

例如「თბილისი」在郵件到達的「ハ-áƒ'áƒ~ლáƒ~სáƒ~」

我們發送電子郵件包含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

回答

0

事實證明,這與我上面的代碼無關。

我們使用第三方供應商發送電子郵件(PostmarkApp)。 它們在發送之前將所有文本/日曆附件/備選視圖轉換爲7位。結果,非ASCII字符最終會變得不穩定。

我將SMTP詳細信息更改爲Gmail以及使用正確編碼發送的電子郵件。 我有一個與他們有關的問題的公開票。

0

設置MailMessage.BodyEncoding是不夠的;您必須分別爲所有備用視圖設置CharSet

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

謝謝塔夫 - 我試過了你的建議,但結果仍然是一樣的。我在問題中添加了一張圖片,以顯示它在Gmail中的顯示效果。 – Eilimint