gpt4 book ai didi

java - 发送电子邮件时的主题编码问题

转载 作者:IT老高 更新时间:2023-10-28 21:14:19 24 4
gpt4 key购买 nike

我正在发送一封电子邮件并且我正确地收到了它,但主题的编码不正确。我正在发送“invitación”,但收到的是“invitaci?n”。消息内容OK。

消息的内容来自速度模板的转换,而主题设置在字符串变量中。

我搜索了一下,发现有人说 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) {
...
}

谢谢

最佳答案

JavaMail 的抽象可能有点过多,而您在这里会成为它的牺牲品。当你使用

Message msg = new MimeMessage(session);

您正在创建 MimeMessage 对象,但将其视为Message 对象。 Message 只有一个 setSubject(String subject) 方法,它使用平台默认字符集对主题进行编码。如果平台默认无法对其进行编码,则会在生成的 header 中获得 ? 字符。然而,MimeMessage 有一个 setSubject(String subject, String charset) 方法,它允许您指定要用于对主题进行编码的字符集。所以只需将您的代码切换为

MimeMessage 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, "UTF-8");

它应该可以工作。

关于java - 发送电子邮件时的主题编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4897836/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com