Hamcrest Mail
Hamcrest Mail is an extension library for the Java Hamcrest matcher library.
It provides matchers for types from the javax.mail
and jakarta.mail
packages.
The assertj-mail sister project provides a set of AssertJ assertions with similar features.
To use Hamcrest Mail in a Maven project add a dependency on org.devopsix:hamcrest-mail
(for Java EE 8 / javax.mail) or org.devopsix:hamcrest-mail-jakarta
(for Jakarta EE 9+ / jakarta.mail) to the pom.xml file.
<!-- Maven coordinates for Java EE 8 / javax.mail -->
<dependency>
<groupId>org.devopsix</groupId>
<artifactId>hamcrest-mail</artifactId>
<version>2.0.8</version>
<scope>test</scope>
</dependency>
<!-- Maven coordinates for Jakarta EE 9+ / jakarta.mail -->
<dependency>
<groupId>org.devopsix</groupId>
<artifactId>hamcrest-mail-jakarta</artifactId>
<version>2.0.8</version>
<scope>test</scope>
</dependency>
The matchers are available as static methods on the MailMatchers
class.
Here are a few examples:
Message message;
Assert.assertThat(message, MailMatchers.hasFrom("anna@example.com"));
Assert.assertThat(message, MailMatchers.hasTo("bob@example.com"));
Assert.assertThat(message, MailMatchers.hasRecipients(Matchers.iterableWithSize(1)));
Assert.assertThat(message, MailMatchers.hasSubject("Message from Anna"));
Assert.assertThat(message, MailMatchers.hasHeader("Return-Path", Matchers.notNullValue()));
Assert.assertThat(message, MailMatchers.hasDateHeader("Resent-Date", Matchers.isA(OffsetDateTime.class)));
// OffsetDateTimeMatchers is from eXparity/hamcrest-date:
// https://github.com/eXparity/hamcrest-date
Assert.assertThat(message, MailMatchers.hasDate(OffsetDateTimeMatchers.within(1, MINUTES, now())));
// Casting to Matcher is required when a matcher's signature is
// Matcher<Iterable<? extends T>> or Matcher<Iterable<? super T>>
Assert.assertThat(message, MailMatchers.hasHeaders("Received", (Matcher)Matchers.hasItems(
Matchers.containsString("host1"), Matchers.containsString("host2"))));
More example can be found in the examples directory (for Java EE 8 / javax.mail) and in the examples-jakarta directory (for Jakarta EE 9+ / jakarta.mail).