【问题标题】:Java Mail Internet Address parse bad format attributes without errors.Java Mail Internet 地址解析错误的格式属性而没有错误。
【发布时间】:2015-10-03 20:22:26
【问题描述】:

我正在使用 Java 邮件。

下面的to string格式不错,发邮件成功了。

String to = "abc@test.com";

而下面的 to2 字符串是一种错误的格式,我希望它在没有的地方抛出错误。

String to2 = 'abctest'
if (StringUtils.hasText(to2)) {
   Address[] toia2 = InternetAddress.parse(to2);
   mailMessage.setRecipients(RecipientType.TO, toia2);
}

它的行为:运行顺利抛出调试器,日志中没有错误消息,但从不发送电子邮件......

谁能教我如何更改我的代码,以便在检查无效的“收件人”、“抄送”等电子邮件地址时抛出错误消息?

谢谢。

【问题讨论】:

  • 您应该仔细检查parse 的行为,我知道布尔变量将允许仅名称地址(即,不允许@foo.bar)即使在严格模式下——我不确定如果非布尔变量也能容忍。

标签: java validation email email-validation


【解决方案1】:

好的,我查看了mail-1.4 中的代码。 InternetAddress.parse 中的代码老实说看起来很糟糕。无论如何,它确实接受它进行大多数验证但不是全部。查看该类,有一个方法 validate 可以进行这些验证。

所以按照下面的方式修改代码就可以了。

   public class Sample {

    public static void main(String... args) throws AddressException {
        String to2 = "abctest";
        if (StringUtils.hasText(to2)) {
            InternetAddress[] toia2 = InternetAddress.parse(to2);
            for(InternetAddress address:toia2){
                address.validate();
            }
        }
    }
}

我正在验证上面的电子邮件地址,您可以在 for 循环中添加 mailMessage.setRecipients(RecipientType.TO, toia2); 或您认为合适的。

【讨论】:

  • 嘿,谢谢。我已经完成了要求。但是为了改进它,您对更好地验证电子邮件地址有什么建议吗?谢谢。
  • 这是有效的方法之一。许多库也提供此功能,例如Apache coomos 有 EmailValidator,它只需要一个字符串并验证它。但没有必要仅出于这个原因使用它。
猜你喜欢
  • 1970-01-01
  • 2017-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多