2016-07-10 5 views
0

Wenn ich E-Mails empfange, bekomme ich ein Fragezeichen für alle Zeichen. Ich bin verwirrt, wo ich falsch liege. Es gibt Attachmnets, die korrekt angezeigt werden nur die Zeichen werden ???? wie Fragezeichen angezeigt. Ich habe verifiziert, dass der Körper korrekt in die asiatische Sprache konvertiert wird, aber bevor ich eine Mail sende, wenn ich erneut die Nachricht verifiziert habe, die sie angezeigt haben: ??.MimeBodyPart setzt keine Kodierung UTF-8 für asiatische Sprachen

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) 
     } 

Dies ist der Header der

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 

Antwort

0

Der mbpText.setHeader Anruf aus folgendem Grunde mbpText.setDataHandler Mail keine Wirkung zeigt. Verwenden Sie nach Möglichkeit die setText-Methoden, mit denen Sie einen Zeichensatz angeben können. Möglicherweise möchten Sie auch die Systemeigenschaft "mail.mime.charset" auf "utf-8" festlegen.

+0

? UTF-8? B? .... Ich bekomme das als mein Thema.Ich benutze message.setSubject (Körper, Zeichensatz) ;. Ich habe debug und an dieser Stelle der Körper ist nicht korrekt chinesische Zeichen und Zeichensatz ist UTF-8 aber auf der Mail, warum es so etwas wie ein Thema? UTF-8? B ?. – Subham

+0

Jetzt bekomme ich leere Stelle, wenn ich Datenhandler-Anwendung ändern \ Octastream. Ich bekomme einen angehängten HTML, wo alle Übersetzungen sind in Chinesisch.So wieder, wenn ich den Datenhandler in part.setDataHandler (neue DataHandler (neue ByteArrayDataSource (text.getBytes ("UTF-8"), "text/html"))); Inhaltstyp: mehrteilig/gemischt; \t boundary = "---- = _ Part_27_-1687030402,1468221528071" ------ = _ Part_27_-1687030402,1468221528071 Content-Type: text/html; charset = ISO-8859-1 Content-Transfer-Encoding: quoted-printable – Subham

+0

Der Betreff wird codiert, da er Nicht-ASCII-Zeichen enthält. der "=? UTF-8? ..." ist der kodierte Text. Es wird vom Mailer entschlüsselt, bevor es angezeigt wird. Verwenden Sie für den Text die setText-Methode, wenn Sie die Daten in einem String haben, und nicht den sehr komplizierten setDataHandler-Aufruf, den Sie verwenden. Wenn die Daten aus einer Datei stammen, verwenden Sie die attachFile-Methode. Sie müssen jedoch wissen, welche Zeichensatzcodierung in der Datei verwendet wurde, und diese in das Argument contentType für die Methode aufnehmen. –

Verwandte Themen