我想向非ASCII电子邮件地址发送电子邮件,并且不确定使用JDK8的推荐步骤是什么。
我应该如何处理以下电子邮件地址?
有什么安全注意事项吗?
此示例代码是否足够?
import java.net.IDN;
public class IDNMailHelper {
public static String toIdnAddress(String mail) {
if (mail == null) {
return null;
}
int idx = mail.indexOf('@');
if (idx < 0) {
return mail;
}
return localPart(mail, idx) + "@" + IDN.toASCII(domain(mail, idx));
}
private static String localPart(String mail, int idx) {
return mail.substring(0, idx);
}
private static String domain(String mail, int idx) {
return mail.substring(idx + 1);
}
}
最佳答案
如果您的服务器支持SMTPUTF8扩展名,则Paweł本质上是对的,应该将地址编码为UTF-8。
JavaMail 1.6版本中提供了对SMTPUTF8的支持。
要启用此支持,您需要设置JavaMail Session属性mail.mime.allowutf8
到true
。确保仅在邮件时设置
服务器支持UTF-8。
对于旧版本的JavaMail,
一种可能的解决方法是将Java Unicode字符串转换为UTF-8编码的字节数组,然后创建Java Unicode字符串,其中每个字节都是一个单独的iso-8859-1字符。我没有尝试过,所以不知道它是否会遇到其他问题。
例如:
address = new String(address.getBytes("utf-8"), "iso-8859-1");