验证电子邮件地址并在Java中打印有效的地址

时间:2013-10-13 10:12:07

标签: java validation exception-handling try-catch

我正在尝试在java中练习异常处理,并通过运行一些(in)有效的电子邮件地址并验证它们来实现。到目前为止,我能够打印出未经验证的那些,但我正在寻找一种方法来打印经过验证的那个。如果我在try块中打印,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)

3 个答案:

答案 0 :(得分:0)

您可以在println来电后添​​加.validate()语句。 由于它会在地址无效时引发异常,因此不会执行println调用。

答案 1 :(得分: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.");
              }

       }

答案 2 :(得分: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

这取决于你的应用程序中非常的场景。有时你想:

  • 避免使用别名(john+1@gmail.com与Gmail的john@gmail.com相同)
  • 避免不存在的顶级域名(cooooooom)(直到new generic top level domains真正存在)

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