2010-03-30 17 views
8

Utilizando el siguiente código, puedo enviar un correo electrónico escrito en otro idioma y, aunque el asunto aparece correctamente, el cuerpo aparece como un galimatías.
¿Alguna idea?
Graciascodificación de correo de Java caracteres no ingleses

public void postMail(String recipient, String subject, String message, String from) throws MessagingException, UnsupportedEncodingException { 

      //Set the host smtp address 
      Properties props = new Properties(); 
      props.put("mail.smtp.host", "mail.infodim.gr"); 

      // create some properties and get the default Session 
      Session session = Session.getDefaultInstance(props, null); 

      // create a message 
      Message msg = new MimeMessage(session); 

      // set the from and to address 
      InternetAddress addressFrom = new InternetAddress(from); 
      msg.setFrom(addressFrom); 

      InternetAddress addressTo=new InternetAddress(recipient); 
      msg.setRecipient(Message.RecipientType.TO, addressTo); 

      // Setting the Subject and Content Type 
      msg.setSubject(subject); 

      msg.setContent(message, "text/plain"); 
      Transport.send(msg); 

     } 
+0

¿Cómo se configuró el sujeto para codificar utf-8? – user3014926

Respuesta

18

Probar:

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

Editar cambió a text/plain.

+0

Nop ... Eso no lo hará –

+2

debe ser "text/plain; charset = \" UTF-8 \ "" – wds

+0

Esta es una muy buena conjetura y probablemente esté cerca de la solución correcta. Solo podemos adivinar en qué juego de caracteres está su correo electrónico. Si no sabe, tal vez pueda agregar algunas líneas de volcado hexadecimal de una muestra a la pregunta. – tripleee

7

En lugar de

msg.setContent(message, "text/plain"); 

me gustaría escribir

Multipart mp = new MimeMultipart(); 
MimeBodyPart mbp = new MimeBodyPart(); 
mbp.setContent(message, "text/plain; charset=ISO-8859-7"); 
mp.addBodyPart(mbp); 

msg.setContent(mp); 

supuse ISO-8859-7 de su nombre porque este juego de caracteres es para el griego, pero tal vez se puede elegir que sea más adecuada. O tal vez también UTF-8 funciona para su caso.

+0

¿Por qué necesita una pieza múltiple para envolver una sola parte del cuerpo? Eso es tonto. – tripleee

+1

tal vez porque tomé el fragmento de una aplicación que también envía archivos adjuntos? .. Soy un novato con correo de Java. – bluish

0

Si nada más ayuda, intente cambiar una codificación de sus archivos de origen (incluidos los archivos .java) a UTF8. En Eclipse se hace a través de Ventana -> Preferencias -> General -> Espacio de trabajo: codificación de archivo de texto Tenía CP1252 como predeterminado para mis archivos de texto.

Estoy recibiendo mi texto de archivos .properties. Cambiarlos a UTF8 no ayudó. Esto es una locura, pero cambiar mis archivos .java a UTF8 resolvió mi problema.

Cuestiones relacionadas