我在使用 Java 邮件 API 时遇到问题。
我可以成功发送邮件,但邮件中没有显示一些特殊字符(来自 ISO-8859-2 语言,如捷克语、斯洛伐克语)。即使在 IDE 输出中,它们也会损坏。
我究竟做错了什么?
Message msg = new MimeMessage(session);
msg.setContent(message, "text/plain; charset=iso-8859-2")
我在使用 Java 邮件 API 时遇到问题。
我可以成功发送邮件,但邮件中没有显示一些特殊字符(来自 ISO-8859-2 语言,如捷克语、斯洛伐克语)。即使在 IDE 输出中,它们也会损坏。
我究竟做错了什么?
Message msg = new MimeMessage(session);
msg.setContent(message, "text/plain; charset=iso-8859-2")
我找到了解决方案,使用多部分。这是代码:
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
MimeMultipart multipart = new MimeMultipart();
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
MimeBodyPart tmpBp = new MimeBodyPart();
tmpBp.setContent(message,"text/plain; charset=utf-8");
multipart.addBodyPart(tmpBp);
msg.setContent(multipart);
Transport.send(msg);
msg.setContent(message, "text/plain; charset=UTF-8");
而不是你给的字符集?
而是UTF-8
用作字符集并将您的 IDE 控制台配置为也使用相同的字符集。我不知道您正在使用哪个 IDE,因为您没有告诉它,但如果它是 Eclipse,那么您可以通过Window > Preferences > General > Workspace > Text file encoding > Other > UTF-8更改它。
如果这不能解决问题,那么问题出在其他地方。也许您正在使用错误的编码从文件中读取消息。为此,您需要使用InputStreamReader
将字符集作为第二个构造函数参数。
您应该使用setText
类中的方法MimeMessage
而不是setContent
/**
* Convenience method that sets the given String as this part's
* content, with a MIME type of "text/plain" and the specified
* charset. The given Unicode string will be charset-encoded
* using the specified charset. The charset is also used to set
* the "charset" parameter.
*
* @param text the text content to set
* @param charset the charset to use for the text
* @exception MessagingException if an error occurs
*/
public void setText(String text, String charset)
throws MessagingException {