Problem mit der Codierung des Betreffs beim Senden einer E-Mail
Ich werde senden Sie eine E-Mail und ich erhalte es richtig, aber die Codierung des Subjekts ist nicht korrekt. Ich bin senden von "invitación" aber ich erhalte "invitaci?n". Der Inhalt der Nachricht ist OK.
Den Inhalt der Nachricht kommt, eine transformation von einem Velocity-Template-während das Thema in eine String-variable.
Habe ich gegoogelt um und ich habe gesehen, dass einige Leute sagt, dass MimeUtility.encodeText() das problem lösen könnte, aber ich hatte kein Erfolg damit.
Wie ich das problem lösen kann? Dies ist der code, den ich bisher haben.
String subject = "Invitación";
String msgBody = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "/vmTemplates/template.vm", "UTF-8", model);
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
try {
String encodingOptions = "text/html; charset=UTF-8";
Message msg = new MimeMessage(session);
msg.setHeader("Content-Type", encodingOptions);
msg.setFrom(new javax.mail.internet.InternetAddress(emailFrom));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(emailTo));
msg.setSubject(subject);
msg.setContent(msgBody, encodingOptions);
Transport.send(msg);
} catch (AddressException e) {
...
} catch (MessagingException e) {
...
}
Dank
InformationsquelleAutor der Frage Javi | 2011-02-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
JavaMail, hat vielleicht ein wenig zu viel Abstraktion, und Sie sind, ein Opfer es hier. Wenn Sie
du bist erstellen eine
MimeMessage
Objekt, sondern behandeln Sie es als eineMessage
Objekt.Message
hat nur einesetSubject(String subject)
- Methode, die die Plattform nutzt Standard-Zeichensatz zu codieren das Thema. Wenn die Standard-Plattform kann nicht codieren, erhalten Sie?
Zeichen in der resultierenden header.MimeMessage
hat jedoch einesetSubject(String subject, String charset)
Methode, die Ihnen erlauben, geben Sie den Zeichensatz Sie verwenden möchten, Kodieren Sie das Thema. So wechseln Sie einfach Ihren code zuund es sollte funktionieren.
InformationsquelleAutor der Antwort dkarp
können Sie verwenden, funktioniert es
InformationsquelleAutor der Antwort Edy Aguirre
Vielleicht können Sie versuchen:
msg.setSubject(subject, "UTF8");
InformationsquelleAutor der Antwort ksimon
In meinem Fall die einzige Sache, die funktioniert hat, ist das ändern der system-Gebietsschema auf die man unterstützt, die die gewünschten Zeichensatz.
Davor habe ich versucht viele verschiedene Möglichkeiten, einschließlich der akzeptierten Antworten aus diesem thread, aber keiner von Ihnen geholfen.
InformationsquelleAutor der Antwort Alexey