2016-07-10 10 views
0

メールを受信すると、すべての文字に疑問符が表示されます。私はどこが間違っているのか混乱している。正しい文字を表示している添付ファイルが表示されています????のような疑問符が表示されています。私はボディが正しくすべてのアジア言語に変換されていることを確認しましたが、メッセージを確認したときにメールを送信する前に、彼らは??と表示していました。MimeBodyPartがアジア言語のエンコードUTF-8を設定していません

public void addAttachmentsforMail(String text, MimeMessage message, List<File> attachments, MimeSubtype mimeSubtype) throws MessagingException { 

    MimeBodyPart mbpText = new MimeBodyPart(); 
    mbpText.setHeader("Content-Type", "text/plain;charset=utf-8"); 

//I have verified till here the body is getting converted to respective asian languages 
    if(mimeSubtype.equals(MimeSubtype.HTML)) { 
        mbpText.setDataHandler(new DataHandler(new ByteArrayDataSource(body, "text/html")));   

      } 

      Multipart mp = new MimeMultipart(); 
      mp.addBodyPart(mbpText);   

      MimeBodyPart mimeAttachment; 
      for (File file : attachment) { 

       mbpAttachment = new MimeBodyPart(); 

       FileDataSource foo = new FileDataSource(file); 
       mimeAttachment.setDataHandler(new DataHandler(foo)); 
       mimeAttachment.setHeader("Content-ID","<" + foo.getName() + ">"); 
       mimeAttachment.setFileName(foo.getName()); 

       mp.addBodyPart(mimeAttachment); 


      } 

    //But When I verify the message in log at here before sending the mail all the charcters were converted in to ???   

message.setContent(mp); 

transport.send(message) 
     } 

これはmbpText.setHeader呼び出しは次の理由mbpText.setDataHandlerのない効果を有していないメール

Message-ID: <[email protected]> 
Subject: =?UTF-8?B?5biQ5oi35Y+K5a+G56CB5o+Q6YaS?= 
MIME-Version: 1.0 
Content-Type: multipart/mixed; 
    boundary="----=_Part_10649_-1456564573.1468164040753" 

------=_Part_10649_-1456564573.1468164040753 
Content-Type: text/html; charset=us-ascii 
Content-Transfer-Encoding: 7bit 

答えて

0

のヘッダです。可能な場合は、charsetを指定できるsetTextメソッドを使用します。システムプロパティ "mail.mime.charset"を "utf-8"に設定することもできます。

+0

?UTF-8?B?....私はこれを私の主題としています。私はmessage.setSubject(body、charset);を使用しています。私はデバッグをしていますが、この時点で本文は正しい中国語の文字と文字セットがUTF-8ですが、メールでなぜこのようなものが件名として表示されていますか?UTF-8?B? – Subham

+0

データハンドラapplication \ octastreamを変更しているときにブランクボディが表示されています。すべての翻訳がchinese.Soにある添付HTMLを取得しています。また、part.setDataHandler(new DataHandler(new ByteArrayDataSource text.getBytes( "UTF-8")、 "text/html"))); コンテンツタイプ:multipart/mixed; \t境界= "---- = _ Part_27_-1687030402.1468221528071" ------ = _ Part_27_-1687030402.1468221528071 コンテンツタイプ:text/html; charset = ISO-8859-1 コンテンツ転送エンコーディング:quoted-printable – Subham

+0

非ASCII文字が含まれているため、サブジェクトがエンコードされています。 "=?UTF-8?..."はエンコードされたテキストです。それはそれを表示する前にメーラーによってデコードされます。本文の場合、文字列にデータがある場合は、使用している非常に複雑なsetDataHandler呼び出しではなく、setTextメソッドを使用します。データがファイルから取得されている場合は、attachFileメソッドを使用しますが、ファイルで使用されているcharsetエンコーディングを知り、メソッドのcontentType引数にそのエンコーディングを含める必要があります。 –

関連する問題