使用下面的代码,我可以发送一封用非英语写的电子邮件,虽然主题正确显示,但正文显示为乱码。
任何想法?
谢谢
public void postMail(String recipient, String subject, String message, String from) throws MessagingException, UnsupportedEncodingException {
//Set the host smtp address
Properties props = new Properties();
props.put("mail.smtp.host", "mail.infodim.gr");
// create some properties and get the default Session
Session session = Session.getDefaultInstance(props, null);
// create a message
Message msg = new MimeMessage(session);
// set the from and to address
InternetAddress addressFrom = new InternetAddress(from);
msg.setFrom(addressFrom);
InternetAddress addressTo=new InternetAddress(recipient);
msg.setRecipient(Message.RecipientType.TO, addressTo);
// Setting the Subject and Content Type
msg.setSubject(subject);
msg.setContent(message, "text/plain");
Transport.send(msg);
}
答案 0 :(得分:18)
尝试:
msg.setContent(message, "text/plain; charset=UTF-8");
修改已更改为text/plain
。
答案 1 :(得分:7)
而不是
msg.setContent(message, "text/plain");
我会写
Multipart mp = new MimeMultipart();
MimeBodyPart mbp = new MimeBodyPart();
mbp.setContent(message, "text/plain; charset=ISO-8859-7");
mp.addBodyPart(mbp);
msg.setContent(mp);
我从你的名字中猜到了ISO-8859-7
,因为这个字符集是针对希腊语的,但也许你可以更恰当地选择它。或者也许UTF-8
适用于您的情况。
答案 2 :(得分:0)
如果没有其他帮助,请尝试将源文件(包括.java文件)的编码更改为UTF8。 在Eclipse中,它通过Window完成 - >偏好 - >一般 - >工作区:文本文件编码 我有CP1252作为我的文本文件的默认值。
我从.properties文件中获取文本。将它们更改为UTF8并没有帮助。 这很疯狂,但将我的.java文件切换为UTF8解决了我的问题!