我想向非ASCII电子邮件地址发送电子邮件,并且不确定使用JDK8的推荐步骤是什么。

我应该如何处理以下电子邮件地址?

  • Dörte@example.com
  • test@Sörensen.de
  • Dörte@Sörensen.de

  • 有什么安全注意事项吗?

    此示例代码是否足够?
    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.allowutf8true。确保仅在邮件时设置
    服务器支持UTF-8。

    对于旧版本的JavaMail,
    一种可能的解决方法是将Java Unicode字符串转换为UTF-8编码的字节数组,然后创建Java Unicode字符串,其中每个字节都是一个单独的iso-8859-1字符。我没有尝试过,所以不知道它是否会遇到其他问题。

    例如:

    address = new String(address.getBytes("utf-8"), "iso-8859-1");
    

    10-06 13:48
    查看更多