Java Tomcat应用中邮件正文重音字符编码问题求助
解决JavaMail发送邮件时重音字符显示为问号的问题
核心原因
你遇到的重音字符变问号,本质是JavaMail默认编码不匹配导致的:MimeMessage.setText(String text)方法默认使用系统平台的默认字符编码(大概率不是UTF-8),带重音的Unicode字符被错误编码后,最终显示为问号。
直接解决方案
1. 给setText指定UTF-8编码
把原来的setText调用改成带编码参数的重载版本:
// 替换之前的 message.setText(yourText); message.setText(yourText, "UTF-8");
如果是HTML格式的邮件,还可以同时指定MIME类型:
message.setText(yourText, "UTF-8", "html");
2. 用setContent显式定义内容类型和编码
如果需要更明确的控制,直接用setContent方法设置MIME类型和字符集:
// 纯文本邮件 message.setContent(yourText, "text/plain; charset=UTF-8"); // HTML邮件的话改成 // message.setContent(yourText, "text/html; charset=UTF-8");
额外检查项
- 发完邮件后可以查看邮件的原始内容,确认
Content-Type头里包含charset=UTF-8,确保编码设置生效。 - 主流邮件客户端都支持UTF-8编码,若遇到老旧客户端无法正常显示,可能需要对方调整客户端的编码设置。
内容的提问来源于stack exchange,提问作者stefano errani
相关产品推荐
相关产品推荐

