The world's only more-or-less-2822-compliant Java-based email address extractor / verifier
- Author: http://stackoverflow.com/a/13133880/441662
- Based on: Les Hazlewood's java regex version, code: https://github.com/lhazlewood/jeav
- Origin: http://lacinato.com/cm/software/emailrelated/emailaddress
- Used in: https://github.com/bbottema/simple-java-mail
email-rfc2822-validator is available in Maven Central:
<dependency>
<groupId>com.github.bbottema</groupId>
<artifactId>emailaddress-rfc2822</artifactId>
<version>1.1.0</version>
</dependency>
And just to show you that this stuff is hard, here's JavaMail's official parser's javadoc on the subject (line 669):
/*
* RFC822 Address parser.
*
* XXX - This is complex enough that it ought to be a real parser,
* not this ad-hoc mess, and because of that, this is not perfect.
*
* XXX - Deal with encoded Headers too.
*/
@SuppressWarnings("fallthrough")
private static InternetAddress[] parse(String s, boolean strict,
boolean parseHdr) throws AddressException {
There are two classes available, EmailaddressValidator and EmailAddressParser. The second is used to extract data from (complex / mangled) email strings.
For both of these, you use the EmailAddressCriteria enumeration to control RFC strictness.
Here's an example for validating an email address:
boolean isValid = EmailAddressValidator.isValid(emailaddress);
boolean isValid = EmailAddressValidator.isValid(emailaddress, EmailAddressCriteria.DEFAULT);
boolean isValid = EmailAddressValidator.isValid(emailaddress, EmailAddressCriteria.RFC_COMPLIANT);
boolean isValid = EmailAddressValidator.isValid(emailaddress, EnumSet.of(ALLOW_DOT_IN_A_TEXT, ALLOW_SQUARE_BRACKETS_IN_A_TEXT));
v1.1.0
- #7: Clarified validation modes (default vs strictly rfc compliant)
NOTE: EmailAddressValidator.isValid() now validates using EmailAddressCriteria.DEFAULT rather than EmailAddressCriteria.RFC_COMPLIANT. Use EmailAddressValidator.isValidStrict() for RFC compliant validation.
v1.0.1
Initial release