【发布时间】:2010-10-27 09:07:01
【问题描述】:
我们的应用程序从 Web 表单中获取文本并通过电子邮件将其发送给适当的用户。但是,当有人从 Word 中复制/粘贴臭名昭著的“智能引号”或其他特殊字符时,事情就会变得棘手。
用户输入
他对我说“你好”——这不是很好吗?
但是当消息出现在 Outlook 2003 中时,它的输出如下:
他打招呼不是很好吗?
代码如下:
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);
这让我更接近,但没有雪茄:
他对我说“你好”——这不是很好吗?
我无法想象这是一个不常见的问题——我错过了什么?
【问题讨论】:
-
charset 是一个 Content-Type 选项,而不是单独的标题。否则,它看起来不错。
标签: java email character-encoding outlook mime-message