2010-01-17 11 views
4

J'ai un problème avec Java Mail API.Le jeu de caractères Java de messagerie ISO-8859-2 ne fonctionne pas

Je peux réussir à envoyer du courrier, mais certains caractères spéciaux (de langues ISO-8859-2 comme tchèque, slovaque) ne sont pas affichés dans le courrier. Ils sont endommagés même dans la sortie IDE.

Qu'est-ce que je fais mal?

Message msg = new MimeMessage(session); 
msg.setContent(message, "text/plain; charset=iso-8859-2") 
+0

une raison de ne pas utiliser commun-email? – Bozho

Répondre

2

J'ai trouvé une solution en utilisant multipart. voici le code:

MimeMessage msg = new MimeMessage(session); 
msg.setFrom(new InternetAddress(from)); 
MimeMultipart multipart = new MimeMultipart(); 
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(recipient)); 
MimeBodyPart tmpBp = new MimeBodyPart(); 
tmpBp.setContent(message,"text/plain; charset=utf-8"); 
multipart.addBodyPart(tmpBp); 
msg.setContent(multipart); 
Transport.send(msg); 
0

utiliser plutôt UTF-8 comme charset et configurer votre console IDE à utiliser aussi bien la même charset. Je ne sais pas quelle IDE que vous utilisez comme vous ne l'avez dit à ce sujet, mais si elle était Eclipse, vous pouvez le changer par la fenêtre > Préférences > Général > Espace de travail > Texte codage de fichier>Autre>UTF-8. Si cela ne résout pas le problème, le problème se situe ailleurs. Peut-être que vous lisez le message d'un fichier en utilisant le mauvais encodage. Pour cela, vous devez utiliser InputStreamReader qui prend le jeu de caractères en tant qu'argument du second constructeur.

+0

J'ai essayé UTF-8 La chose étrange est que cela fonctionne dans IDE (NetBeans) quand je définis manuellement println (System.out.println ("Un peu de texte en utilisant des caractères spéciaux"), montre ok .... mais j'ai fait sortie à IDE du message qui est envoyé et cette sortie est endommagée:/ – miso

0

Vous devez utiliser la méthode setText de la classe MimeMessage au lieu de setContent

/** 
    * Convenience method that sets the given String as this part's 
    * content, with a MIME type of "text/plain" and the specified 
    * charset. The given Unicode string will be charset-encoded 
    * using the specified charset. The charset is also used to set 
    * the "charset" parameter. 
    * 
    * @param text the text content to set 
    * @param charset the charset to use for the text 
    * @exception MessagingException if an error occurs 
    */ 
    public void setText(String text, String charset) 
      throws MessagingException { 
+0

ne fonctionne pas lorsque charset = "text/html; charset = utf-8" – Ajay

2

msg.setContent (message, "text/plain; charset = UTF-8");

au lieu du jeu de caractères que vous avez donné?