Utilizzo API Java Mail e sto tentando di inviare un'email tramite SMTP di Gmail. Come funziona il mio programma: java.util.Scanner la classe viene utilizzata per ottenere l'input dell'utente - Chiedo all'utente di utilizzare vari parametri nella classe di invio della posta; che fa quanto segue:Java Mail - Problemi di codifica
Message mailMessage = new MimeMessage(session);
mailMessage.setFrom(new InternetAddress("[email protected]"));
mailMessage.setRecipients(Message.RecipientType.TO,InternetAddress.parse(mail.getTo()));
mailMessage.setSubject(mail.getSubject());
mailMessage.setText(mail.getMessage());
Transport.send(mailMessage);
Tutto funziona fintanto che utilizzo simboli/caratteri ASCII. Ma ogni volta che voglio usare caratteri "specifici per paese" - come [õäöü] - ottengo un sacco di simboli dall'aspetto strano ...
Tecniche che ho usato finora (che non funzionano per me):
setHeader("Content-Type", "text/plain; charset=UTF-8");
setHeader("Content-Encoding","ISO-8859-9");
setContent(message, "text/plain; charset=iso-8859-2");
Nota: tutto è visualizzato correttamente all'interno di un IDE quando viene eseguita System.out.println() per visualizzare il messaggio da inviare.
MODIFICA: e.x. quando il corpo del messaggio inviato è [õäöü] Viene visualizzato [ä ""?] in Gmail.
EDIT: Quando si utilizza mailMessage.setText(MimeUtility.encodeText(mail.getMessage(), "UTF-8", "Q"));
, allora l'uscita di Gmail è la seguente:
"=?UTF-8?Q?=C3=A4=E2=80=9E=E2=80=9D=EF=BF=BD;=0D=0A?="
ALTRO EDIT: È interessante notare che, quando lo faccio: mailMessage.setText(strVar + "õäöü", "ISO-8859-1");
Si aggiunge in realtà "õäöü" bene nella mia e-mail (ma il la prima parte [strVar] della stringa è ancora piena di? 's e []' s).
Come si imposta 'strVar' ?, e cosa succede se si assegna' strVar' immediatamente prima di 'mailMessate.setText (..)'? Forse il contenuto che ricevi dallo scanner non è lo stesso della stringa che funziona. –
Ho cambiato il mio codice un po 'per permettere a me di inviare HTML, quindi il mio metodo di invio è: 'message.setContent ("
[õäöü]
"+ strVar +"
", "text/html"); ' Quando ottengo una mail, l'HTML viene analizzato correttamente, quindi è" [õäöü] ", ma' strVar' sembra "venire" in modo errato. Ho una classe 'Input' e' get() 'metodo all'interno di esso: ' public String get() { /* dichiarazione Scanner qui */ ritorno scanner.nextLine(); } ' E in seconda classe' MailSender' inizializzo 'strVar' così: ' /* classe di ingresso dichiarazione */ String = strVar input.get(); // Scusa, difficile scrivere il codice qui :) – FurlandoPuoi verificare quali caratteri sono presenti nella stringa (e in che modo si confronta con i caratteri nel caso in cui funziona)? –