0

我正在尝试在 java 中练习异常处理,并通过运行一些(无效的)电子邮件地址并验证它们来实现。到目前为止,我可以打印出未验证的,但我正在寻找一种方法来打印已验证的。如果我在 try 块中使用 println,则 john.doe.gmail.com 地址会因某种原因打印为已验证。

有人可以提出一些建议吗?

import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;

public class AdressChecker  {
  public static void main(String args[]) {
    String toTest[] =
          {"john.doe@gmail.com", "john.doe.gmail.com", "john.doe@", "@gmail.com"};

    System.out.println("Addresses to be verified");
    for (String x : toTest)
      System.out.println(x);
    for (String s : toTest) {
      try {
        InternetAddress emailAddr = new InternetAddress(s);                    
        emailAddr.validate();                        
      } catch (AddressException ex) {
        System.out.println(s + " is not a valid E-Mail Address.");
      }
    }
  }
}    

现在工作。输出是:

Addresses to be verified
john.doe@gmail.com
john.doe.gmail.com
john.doe@
@gmail.com
john.doe@gmail.com is a valid E-Mail Address.
john.doe.gmail.com is not a valid E-Mail Address.
john.doe@ is not a valid E-Mail Address.
@gmail.com is not a valid E-Mail Address.
BUILD SUCCESSFUL (total time: 0 seconds)
4

3 回答 3

0

您可以在通话后添加您的println声明。.validate()由于地址无效时会引发异常,因此println不会执行调用。

于 2013-10-13T10:20:00.997 回答
0

尝试在emailAddr.validate()检查后打印电子邮件:

for (String s : toTest) 
        {
            try
             {
                 InternetAddress emailAddr = new InternetAddress(s);                    
                 emailAddr.validate();
                 System.out.println(s + " is a valid E-Mail Address.");                        
             }    
            catch (AddressException ex)
             {
             System.out.println(s + " is not a valid E-Mail Address.");
              }

       }
于 2013-10-13T10:20:45.163 回答
0

使用该InternetAddress.validate()方法,您不会检查电子邮件地址的有效性。RFC 822 (第 6.1 节)中的语法比我们今天通常用作电子邮件地址的地址要广泛得多。想想这样ssh的工具也将互联网地址作为参数,它们看起来像:user@localhost. 这通过了InternetAddress验证,因为它是一个有效的 Internet 地址。并且在某些网络场景中也可以是有效的电子邮件地址。

所以你会有这样的答案吗?

Addresses to be verified
john@gmail is a valid E-Mail Address
john@gmail.coooooooooooooom is a valid E-Mail Address
john+1@gmail.com is a valid E-Mail Address
john+2@gmail.com is a valid E-Mail Address
john+3000@gmail.com is a valid E-Mail Address

这在很大程度上取决于的应用程序中的场景。有时你想:

  • 避免使用别名(与Gmailjohn+1@gmail.com相同)john@gmail.com
  • 避免不存在的顶级域(cooooooom)(直到新的通用顶级域真正存在)
  • 等等

如果您的电子邮件地址只能是在 Web 上使用的有效电子邮件地址(例如拥有域和子域),我建议使用正则表达式。为此,您有很多答案:

于 2013-10-13T10:35:05.460 回答