- Fix bug where email addresses containing control characters in the local-part were incorrectly considered valid. (Thanks @PascalSchumacher for reporting!)
- Add new methods
ifValid(Consumer<Email> action)
andifValidOrElse(Consumer<Email> action, Consumer<FailureReason> failureAction)
to theEmailValidationResult
object.
- Fix bug where IPv4 addresses with non-arabic numerals would incorrectly be considered valid. (Thanks @harrel56 for reporting!)
- Fix bug where IPv4 addresses with extraneous leading zeros would incorrectly be considered valid. (Thanks @harrel56 for reporting!)
- The
requireValidMXRecord()
validation rule now correctly fails validation for domains that use a "Null MX" record. (Thanks @elmolm for contributing! 🎉)
- Fix bug so that email addresses that end in a dash
-
character now correctly fail validation with the reasonFailureReason.DOMAIN_PART_ENDS_WITH_DASH
instead of incorrectly returningFailureReason.ENDS_WITH_DOT
. (Thanks @tbatchlear for reporting!)
- Add a new rule
requireAscii()
that considers an email address containing non-ASCII characters to be invalid. (Thanks @frodeto for suggesting!) - Add new property
isAscii()
onEmail
objects that returns if the email address only contains ASCII characters or not. - Add option to strip quotes within the local-part of an email address when normalizing the address with the
normalize()
method. (Thanks @tdelaney-leadiro for suggesting!)- This new option will remove quotes if the email address would still be valid and semantically the same without them.
- To enable the option, either:
- Call the normalize method that takes a boolean as the parameter, and use
true
. Example:email.normalize(true)
- Set the
-Djmail.normalize.strip.quotes=true
JVM property at runtime, and continue to use thenormalize()
method without parameters.
- Call the normalize method that takes a boolean as the parameter, and use
- Add a new rule
requireValidMXRecord(int initialTimeout, int numRetries)
that allows for customization of the timeout for DNS lookups. (Thanks @dotneutron for suggesting!) - Reduce the default timeout for DNS lookups when adding the
requireValidMXRecord()
rule to anEmailValidator
from potentially taking a maximum of 25 seconds to a maximum of 600 milliseconds.
- Add new method
validate(String email)
that returns anEmailValidationResult
object, containing the reason for validation failure upon failure. (Thanks @bobharner for suggesting!) - Add new
ValidationRule
requireValidMXRecord()
to consider email addresses that have a domain with no MX record in DNS as invalid. (Thanks @lpellegr for suggesting!) - Fix bug where an email address that ends with a comment that is missing the closing parentheses were incorrectly considered as valid. For example:
test@test.com(comment
- Add new
ValidationRule
disallowObsoleteWhitespace()
to consider email addresses with obsolete whitespace as invalid. (Thanks @PascalSchumacher for suggesting!)
- Add new
normalized()
method on theEmail
class to provide a way to get a "normalized" version of an email address (the address without any comments or optional parts).
- Fix bug where invalid characters in the domain could result in an
IllegalArgumentException
instead of returning false. (Thanks @PascalSchumacher for reporting!)
- Fix bug where domain names that contained an emoji would be incorrectly invalid. (Thanks @Autom8edChaos for reporting!)
- Improve
equals()
andhashCode()
methods forEmail
andTopLevelDomain
- Fix inconsistencies in some Javadocs
InternetProtocolAddress.validate(String ip)
now validates IPv6 addresses without requiring theIPv6:
prefix.- Add new
JMail.isInvalid(String email)
andEmailValidator#isInvalid(String email)
methods as a convenience for testing if an email address is invalid.
- Add
toString()
method onEmailValidator
- Add
withRules(Collection<Predicate<Email>> rules)
method onEmailValidator
to create a newEmailValidator
from the collection of rules provided
- Fix bug where an exception would be thrown on invalid email addresses with whitespace or comments after a trailing
.
character. For example,abc.def@ghi. (comment)
is invalid, and before this version JMail would throw an exception instead of return invalid. (Thanks @ea234 for reporting!)
EmailValidator
is now immutable
- Switch
TopLevelDomain
from an enum to a class, allowing for creation of any valid top level domain (Thanks @bowbahdoe!) - Add
module-info.java
so projects on JDK 9+ can use this library as a Java module - Bugfix: Addresses with empty quoted strings (
""@test.org
) are now correctly considered valid - Bugfix: Addresses with explicit source routing (
@1st.relay,@2nd.relay:user@final.domain
) are now considered valid. However, explicit source routing is deprecated since RFC 5321.JMail.strictValidator()
disallows explicit source routing by default - Bugfix: Addresses with quoted identifiers (
John Smith <John@smith.com>
) are now correctly considered valid - New properties on the
Email
object:identifier()
hasIdentifier()
explicitSourceRoutes()
- Disallow construction of utility classes and prevent classes from being subclassed (Thanks @bowbahdoe!)
- Fix bug where email addresses that have a dotless domain or top level domain starting with the
-
character would be incorrectly classified as valid. For example,test@-foo
andtest@my.-domain
should both be invalid.
-
You can now disallow email addresses with reserved domains listed in RFC 2606, such as
example.com
or.invalid
.JMail.validator().disallowReservedDomains().isValid("test@example.com");
- Fix bug where JMail did not consider single quoted symbols (ex.
\@
) as valid.
- Better javadocs
- Internal performance improvements
- Add
JMail.strictValidator()
that has pre-configured common rules enabled (stricter than the RFCs allow)
- Initial release of JMail with email validation, IP address validation, and custom rules.