4

我在使用 Java 邮件 API 时遇到问题。

我可以成功发送邮件,但邮件中没有显示一些特殊字符(来自 ISO-8859-2 语言,如捷克语、斯洛伐克语)。即使在 IDE 输出中,它们也会损坏。

我究竟做错了什么?

Message msg = new MimeMessage(session);
msg.setContent(message, "text/plain; charset=iso-8859-2")
4

4 回答 4

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);
于 2010-01-17T18:41:39.573 回答
2

msg.setContent(message, "text/plain; charset=UTF-8");

而不是你给的字符集?

于 2010-05-10T10:13:25.930 回答
0

而是UTF-8用作字符集并将您的 IDE 控制台配置为也使用相同的字符集。我不知道您正在使用哪个 IDE,因为您没有告诉它,但如果它是 Eclipse,那么您可以通过Window > Preferences > General > Workspace > Text file encoding > Other > UTF-8更改它。

如果这不能解决问题,那么问题出在其他地方。也许您正在使用错误的编码从文件中读取消息。为此,您需要使用InputStreamReader将字符集作为第二个构造函数参数。

于 2010-01-17T18:20:51.680 回答
0

您应该使用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 {
于 2010-01-18T14:18:52.083 回答