2010-03-30 13 views
8

usando il codice seguente posso inviare una e-mail scritta in non-inglese e anche se il soggetto appare correttamente il corpo appare come senza senso.
Qualche idea?
GrazieJava codifica elettronica caratteri non inglesi

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

Come hai impostato l'oggetto per codificare utf-8, quindi? – user3014926

risposta

18

Prova:

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

Modifica cambiato a text/plain.

+0

Nop..That non lo farà –

+2

dovrebbe essere "text/plain; charset = \" UTF-8 \ "" – wds

+0

Questa è un'ipotesi molto buona e probabilmente vicina alla soluzione corretta. Possiamo solo indovinare in quale set di caratteri è inserita la tua email. Se non lo sai, forse puoi aggiungere alcune righe di dump esadecimale di un campione alla domanda. – tripleee

7

Invece di

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

avrei scritto

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

msg.setContent(mp); 

ho indovinato ISO-8859-7 dal tuo nome, perché questo charset è per il greco, ma forse è possibile scegliere più correttamente. O forse anche UTF-8 funziona per il tuo caso.

+0

Perché hai bisogno di una multipart per avvolgere una singola parte del corpo? È semplicemente sciocco. – tripleee

+1

forse perché ho preso lo snippet da un'applicazione che invia anche gli allegati? .. Sono un principiante con Java mail. – bluish

0

Se non aiuta altro, provare a cambiare una codifica dei file di origine (inclusi i file .java) a UTF8. In Eclipse avviene tramite Finestra -> Preferenze -> Generale -> Area di lavoro: Codifica file di testo Avevo CP1252 come predefinito per i miei file di testo.

Sto ricevendo il mio testo dai file .properties. Cambiarli in UTF8 non ha aiutato. Questo è folle, ma il cambio dei miei file .java in UTF8 ha risolto il mio problema!