2017-06-25 42 views
2

添付ファイル付きのメールを送信できるアプリケーションで作業していますが、特殊文字æ、ø、åを試すまで動作します。gmail apiとae.net.mailのような特殊な文字をエンコードすることができません。

enter image description here

私は異なるエンコーディングをテスト周りのビットを果たし、メールの残りの部分は、UTF-8でエンコードされている間、被験者がISO-8859-1でエンコードされているように見えます。ここで

 public Message CreateMessage(string to, string from, string body, string subject, GmailService service, string[] files = null, string bcc = null) 
    { 
     AE.Net.Mail.MailMessage message = new AE.Net.Mail.MailMessage() 
     { 
      Subject = subject, 
      Body = body, 
      From = new MailAddress(from), 
     }; 

     message.To.Add(new MailAddress(to)); 
     message.ReplyTo.Add(message.From); 

     message.Headers.Add("Content-Type", "text/plain; charset=utf-8"); 

     if (bcc != null) 
      message.Bcc.Add(new MailAddress(bcc)); 

     if (files != null) 
     { 
      foreach(string file in files) 
      { 
       using (var opennedFile = File.Open(file, FileMode.Open, FileAccess.Read)) 
       using (MemoryStream stream = new MemoryStream()) 
       { 
        string[] FileName = file.Split('\\'); 
        opennedFile.CopyTo(stream); 
        message.Attachments.Add(new AE.Net.Mail.Attachment(stream.ToArray(), MediaTypeNames.Application.Octet, FileName[FileName.Length - 1], true)); 
       } 
      } 
     } 

     var msgStr = new StringWriter(); 
     message.Save(msgStr); 

     return new Message() { 
      Raw = Base64UrlEncode(msgStr.ToString()), 
     }; 
    } 

    private static string Base64UrlEncode(string message) 
    { 
     var inputBytes = Encoding.GetEncoding("utf-8").GetBytes(message); 
     return Convert.ToBase64String(inputBytes).Replace('+', '-').Replace('/', '_').Replace("=", ""); 
    } 

message.ContentType = GoogleのGmailのAPIメッセージを生成私の方法である "text/plainのを;のcharset = UTF-8" この問題を修正し、添付ファイルはで表示させていません本文をBase64として

+0

? – DaImTo

答えて

0

the following techniqueを使用すると、件名のヘッダーにUTF-8を使用できます。あなたはその後encoded-textとしてcharset=utf-8encoding=B(B = BASE64)、及び符号化された被験者を使用することができ

=?charset?encoding?encoded-text?= 

例からのスクリーンショットである

Subject: =?utf-8?B?aGVsbG8=?= // 'aGVsbG8=' is 'hello' in base64 format. 
+1

私はすでにこれをテストしたように違いは何だったのかわかりませんが、何とかあなたの例が私のために働いた – dark2222

関連する問題