java - MimeMessage 中的智能引号未在 Outlook 中正确显示

标签 java email character-encoding outlook mime-message

我们的应用程序从网络表单中获取文本,并通过电子邮件将其发送给适当的用户。然而,当有人从 Word 中复制/粘贴臭名昭著的“智能引号”或其他特殊字符时,事情就会变得棘手。

用户输入

he said “hello” to me—isn’t that nice?

但是当该邮件出现在 Outlook 2003 中时,结果如下:

he said hello to meisnt that nice?

代码是:

Session session = Session.getInstance(props, new MailAuthenticator());
Message msg = new MimeMessage(session);

//removed setting to/from addresses to simplify

msg.setSubject(subject);
msg.setText(text);
msg.setHeader("X-Mailer", MailSender.class.getName());
msg.setSentDate(new Date());
Transport.send(msg);

经过一番研究,我认为这可能是字符编码问题,并尝试将内容转移到 UTF-8。所以,我这样更新了代码:

Session session = Session.getInstance(props, new MailAuthenticator());
MimeMessage msg = new MimeMessage(session);

//removed setting to/from addresses to simplify

msg.setHeader("X-Mailer", MailSender.class.getName());
msg.addHeader("Content-Type", "text/plain");
msg.addHeader("charset", "UTF-8");
msg.setSentDate(new Date());
Transport.send(msg);

这让我更接近,但没有雪茄:

he said “hello” to me—isn’t that nice?

我无法想象这是一个不常见的问题——我错过了什么?

最佳答案

包含表单的页面是否也使用 UTF-8 或不同的字符集?如果您不指定网页字符集,则任何人都可以猜测传入脚本的数据格式。

<小时/>

编辑:消息中的字符集应如下设置:

msg.addHeader("Content-Type", "text/plain; charset=UTF-8");

因为字符集不是一个单独的 header ,而是 Content-type 的一个选项

关于java - MimeMessage 中的智能引号未在 Outlook 中正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/883532/

相关文章:

java - 如何从服务中打开(切换、设置)软键盘

image - 使用带有嵌入图像的经典 ASP 发送电子邮件

c# - 为什么 XmlReader 的默认编码与 XmlTextReader 的默认编码行为不同?

java - 当我将可变对象变成不可变对象(immutable对象)时,方法名称应该如何更改?

java - Eclipse:没有编译错误。批处理:编译错误

java - 关于java RMI。如何使用LocateRegistry在指定端口的远程主机上获取Registry?

php - PHP邮件功能无法完成电子邮件的发送

php - 使用 Codeigniter 在电子邮件中发送 pdf 而不将其保存在服务器上

c - 如何在 OSX 上的 C 程序中处理(推测的)UTF-8 字符串

使用 UTF-16 编码的 R write.csv