我使用以下代码成功通过GMail的SMTP服务器发送电子邮件:
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.ssl", "true");
props.put("mail.smtp.starttls.enable","true");
props.put("mail.smtp.timeout", "5000");
props.put("mail.smtp.connectiontimeout", "5000");
// Do NOT use Session.getDefaultInstance but Session.getInstance
// See: http://forums.sun.com/thread.jspa?threadID=5301696
final Session session = Session.getInstance( props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication( USER, PWD );
}
});
try {
final Message message = new MimeMessage(session);
message.setFrom( new InternetAddress( USER ) );
message.setRecipients( Message.RecipientType.TO, InternetAddress.parse( TO ) );
message.setSubject( emailSubject );
message.setText( emailContent );
Transport.send(message);
emailSent = true;
} catch ( final MessagingException e ) {
e.printStackTrace();
}
其中 emailContent 是包含Unicode字符的 String (如欧元符号)。
当电子邮件到达时(在另一个GMail帐户中),欧元符号已转换为ASCII'?'问号。
我对电子邮件了解不多:电子邮件可以使用任何字符编码吗?
我应该在上面的代码中修改什么,以便使用允许使用Unicode字符的编码?
答案 0 :(得分:13)
回答我自己的问题:您需要使用 Message 类中的 setHeader 方法,如下所示(以下内容已尝试过并且正在运行):
message.setHeader("Content-Type", "text/plain; charset=UTF-8");
答案 1 :(得分:4)
您需要指定内容类型的MIME标头,以告知您要以UTF-8发送电子邮件。
使用MimeMessage并使用两个参数调用setText,传入charset。