我正在发送一封电子邮件,我已经正确地接收到它,但是主题的编码不正确。我发送了“invitación”,但是我收到了“invitaci?n”。消息的内容是正确的。
消息的内容来自Velocity模板的转换,而主题在字符串变量中设置。
我已经搜索过并看到一些人说MimeUtility.encodeText()可以解决此问题,但我尝试使用它没有成功。
我该如何解决这个问题?这是我目前的代码。
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) {
...
}
感谢。
Message
的唯一已发布的子类是MimeMessage
。我怀疑是否有人实现了另一个子类。如果他们只合并了javax.mail
和javax.mail.internet
,JavaMail 就会更好用 -- 那个额外的抽象层只意味着你不断地向子类转换。 - dkarpmsg.setSubject("\u00a3", "UTF-8")
但它没有正确编码主题吗?那么结果的主题头部是什么? - dkarp