Skip to content

Commit

Permalink
#319: Switched from email-rfc2822-validator to jmail
Browse files Browse the repository at this point in the history
  • Loading branch information
bbottema committed Jun 4, 2021
1 parent 5d166fa commit 56bdcf2
Show file tree
Hide file tree
Showing 11 changed files with 147 additions and 161 deletions.
6 changes: 3 additions & 3 deletions modules/core-module/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,9 @@
</dependency>

<dependency>
<groupId>com.github.bbottema</groupId>
<artifactId>emailaddress-rfc2822</artifactId>
<version>2.2.0</version>
<groupId>com.sanctionco.jmail</groupId>
<artifactId>jmail</artifactId>
<version>1.2.1</version>
</dependency>

<dependency><!-- Annotation processor -->
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package org.simplejavamail.api.mailer;

import org.hazlewood.connor.bottema.emailaddress.EmailAddressCriteria;
import org.hazlewood.connor.bottema.emailaddress.EmailAddressValidator;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.simplejavamail.MailException;
Expand Down Expand Up @@ -103,7 +101,7 @@ public interface Mailer {
*
* @return Always <code>true</code> (throws a {@link MailException} exception if validation fails).
* @throws MailException Is being thrown in any of the above causes.
* @see EmailAddressValidator
* @see com.sanctionco.jmail.EmailValidator
*/
@SuppressWarnings({"SameReturnValue" })
boolean validate(Email email) throws MailException;
Expand All @@ -130,7 +128,7 @@ public interface Mailer {
/**
* @return The transport strategy to be used. Will be {@code null} in case a custom fixed {@link Session} instance is used.
* @see org.simplejavamail.api.mailer.MailerRegularBuilder#withTransportStrategy(TransportStrategy)
* @see EmailAddressCriteria
* @see com.sanctionco.jmail.EmailValidator
*/
@Nullable
TransportStrategy getTransportStrategy();
Expand All @@ -148,7 +146,7 @@ public interface Mailer {
OperationalConfig getOperationalConfig();

/**
* @return The effective governance applied to each email (default S/MIME signing, email addresscriteria for validation etc.).
* @return The effective governance applied to each email (default S/MIME signing, email validator etc.).
*/
@NotNull
EmailGovernance getEmailGovernance();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.simplejavamail.api.mailer;

import org.hazlewood.connor.bottema.emailaddress.EmailAddressCriteria;
import com.sanctionco.jmail.EmailValidator;
import com.sanctionco.jmail.JMail;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.simplejavamail.api.internal.clisupport.model.Cli;
Expand All @@ -12,7 +13,6 @@
import javax.mail.Session;
import java.io.File;
import java.io.InputStream;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
Expand Down Expand Up @@ -219,15 +219,15 @@ public interface MailerGenericBuilder<T extends MailerGenericBuilder<?>> {
T withSessionTimeout(@NotNull Integer sessionTimeout);

/**
* Sets the email address validation restrictions when validating and sending emails using the current <code>Mailer</code> instance.
* Sets the email address validator used when validating and sending emails using the current <code>Mailer</code> instance.
* <p>
* Defaults to {@link EmailAddressCriteria#RFC_COMPLIANT} if not overridden with a ({@code null}) value.
* Defaults to {@link JMail#strictValidator()}.
*
* @see EmailAddressCriteria
* @see #clearEmailAddressCriteria()
* @see #resetEmailAddressCriteria()
* @see EmailValidator
* @see #clearEmailValidator()
* @see #resetEmailValidator()
*/
T withEmailAddressCriteria(@NotNull EnumSet<EmailAddressCriteria> emailAddressCriteria);
T withEmailValidator(@NotNull EmailValidator emailValidator);

/**
* Signs this <em>all emails by default</em> with an <a href="https://tools.ietf.org/html/rfc5751">S/MIME</a> signature, so the receiving client
Expand Down Expand Up @@ -503,12 +503,12 @@ public interface MailerGenericBuilder<T extends MailerGenericBuilder<?>> {
T resetSessionTimeout();

/**
* Resets emailAddressCriteria to {@link EmailAddressCriteria#RFC_COMPLIANT}.
* Resets the email validator to {@link JMail#strictValidator()}.
*
* @see #withEmailAddressCriteria(EnumSet)
* @see #clearEmailAddressCriteria()
* @see #withEmailValidator(EmailValidator)
* @see #clearEmailValidator()
*/
T resetEmailAddressCriteria();
T resetEmailValidator();

/**
* Resets the executor services to be used back to the default, created by the Batch module if loaded, or else
Expand Down Expand Up @@ -623,12 +623,12 @@ public interface MailerGenericBuilder<T extends MailerGenericBuilder<?>> {
T clearProxy();

/**
* Removes all email address criteria, meaning validation won't take place.
* Makes the email validator <code>null</code>, meaning validation won't take place.
*
* @see #withEmailAddressCriteria(EnumSet)
* @see #resetEmailAddressCriteria()
* @see #withEmailValidator(EmailValidator)
* @see #resetEmailValidator()
*/
T clearEmailAddressCriteria();
T clearEmailValidator();

/**
* Removes S/MIME signing, so emails won't be signed by default.
Expand Down Expand Up @@ -703,10 +703,10 @@ public interface MailerGenericBuilder<T extends MailerGenericBuilder<?>> {
Integer getSessionTimeout();

/**
* @see #withEmailAddressCriteria(EnumSet)
* @see #withEmailValidator(EmailValidator)
*/
@Nullable
EnumSet<EmailAddressCriteria> getEmailAddressCriteria();
EmailValidator getEmailValidator();

/**
* @see #signByDefaultWithSmime(Pkcs12Config)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
package org.simplejavamail.api.mailer.config;

import org.hazlewood.connor.bottema.emailaddress.EmailAddressCriteria;
import org.jetbrains.annotations.NotNull;
import com.sanctionco.jmail.EmailValidator;
import org.jetbrains.annotations.Nullable;
import org.simplejavamail.api.email.EmailPopulatingBuilder;
import org.simplejavamail.api.mailer.MailerGenericBuilder;

import java.io.InputStream;
import java.util.EnumSet;

/**
* Governance for all emails being sent through the current {@link org.simplejavamail.api.mailer.Mailer} instance.
Expand All @@ -18,12 +16,12 @@
public interface EmailGovernance {

/**
* @return The effective validation criteria used for email validation. Returns an empty set if no validation should be done.
* @see MailerGenericBuilder#withEmailAddressCriteria(EnumSet)
* @see EmailAddressCriteria
* @return The effective email validator used for email validation. Can be <code>null</code> if no validation should be done.
* @see MailerGenericBuilder#withEmailValidator(EmailValidator)
* @see EmailValidator
*/
@NotNull
EnumSet<EmailAddressCriteria> getEmailAddressCriteria();
@Nullable
EmailValidator getEmailValidator();

/**
* @see EmailPopulatingBuilder#signWithSmime(Pkcs12Config)
Expand All @@ -33,4 +31,4 @@ public interface EmailGovernance {
*/
@Nullable
Pkcs12Config getPkcs12ConfigForSmimeSigning();
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package org.simplejavamail.mailer;

import org.hazlewood.connor.bottema.emailaddress.EmailAddressCriteria;
import org.hazlewood.connor.bottema.emailaddress.EmailAddressValidator;
import com.sanctionco.jmail.EmailValidator;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.simplejavamail.MailException;
Expand All @@ -16,7 +15,6 @@
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;
import java.util.Collection;
import java.util.EnumSet;
import java.util.Map;

import static java.lang.String.format;
Expand All @@ -33,7 +31,7 @@ public class MailerHelper {
private static final Logger LOGGER = getLogger(MailerHelper.class);

@SuppressWarnings({ "SameReturnValue" })
public static boolean validate(@NotNull final Email email, @NotNull final EnumSet<EmailAddressCriteria> emailAddressCriteria)
public static boolean validate(@NotNull final Email email, @Nullable final EmailValidator emailValidator)
throws MailException {
LOGGER.debug("validating email...");

Expand All @@ -47,30 +45,30 @@ public static boolean validate(@NotNull final Email email, @NotNull final EnumSe
} else if (email.isUseReturnReceiptTo() && email.getReturnReceiptTo() == null) {
throw new MailValidationException(MailValidationException.MISSING_RETURNRECEIPTTO);
} else
if (!emailAddressCriteria.isEmpty()) {
if (!EmailAddressValidator.isValid(email.getFromRecipient().getAddress(), emailAddressCriteria)) {
if (emailValidator != null) {
if (!emailValidator.isValid(email.getFromRecipient().getAddress())) {
throw new MailValidationException(format(MailValidationException.INVALID_SENDER, email));
}
for (final Recipient recipient : email.getRecipients()) {
if (!EmailAddressValidator.isValid(recipient.getAddress(), emailAddressCriteria)) {
if (!emailValidator.isValid(recipient.getAddress())) {
throw new MailValidationException(format(MailValidationException.INVALID_RECIPIENT, email));
}
}
if (email.getReplyToRecipient() != null && !EmailAddressValidator
.isValid(email.getReplyToRecipient().getAddress(), emailAddressCriteria)) {
if (email.getReplyToRecipient() != null && !emailValidator.isValid(email.getReplyToRecipient().getAddress())) {
throw new MailValidationException(format(MailValidationException.INVALID_REPLYTO, email));
}
if (email.getBounceToRecipient() != null && !EmailAddressValidator
.isValid(email.getBounceToRecipient().getAddress(), emailAddressCriteria)) {
if (email.getBounceToRecipient() != null && !emailValidator.isValid(email.getBounceToRecipient().getAddress())) {
throw new MailValidationException(format(MailValidationException.INVALID_BOUNCETO, email));
}
if (email.isUseDispositionNotificationTo() && !EmailAddressValidator
.isValid(checkNonEmptyArgument(email.getDispositionNotificationTo(), "dispositionNotificationTo").getAddress(), emailAddressCriteria)) {
throw new MailValidationException(format(MailValidationException.INVALID_DISPOSITIONNOTIFICATIONTO, email));
if (email.isUseDispositionNotificationTo()) {
if (!emailValidator.isValid(checkNonEmptyArgument(email.getDispositionNotificationTo(), "dispositionNotificationTo").getAddress())) {
throw new MailValidationException(format(MailValidationException.INVALID_DISPOSITIONNOTIFICATIONTO, email));
}
}
if (email.isUseReturnReceiptTo() && !EmailAddressValidator
.isValid(checkNonEmptyArgument(email.getReturnReceiptTo(), "returnReceiptTo").getAddress(), emailAddressCriteria)) {
throw new MailValidationException(format(MailValidationException.INVALID_RETURNRECEIPTTO, email));
if (email.isUseReturnReceiptTo()) {
if (!emailValidator.isValid(checkNonEmptyArgument(email.getReturnReceiptTo(), "returnReceiptTo").getAddress())) {
throw new MailValidationException(format(MailValidationException.INVALID_RETURNRECEIPTTO, email));
}
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,40 +1,37 @@
package org.simplejavamail.mailer.internal;

import org.hazlewood.connor.bottema.emailaddress.EmailAddressCriteria;
import org.jetbrains.annotations.NotNull;
import com.sanctionco.jmail.EmailValidator;
import org.jetbrains.annotations.Nullable;
import org.simplejavamail.api.mailer.config.EmailGovernance;
import org.simplejavamail.api.mailer.config.Pkcs12Config;

import java.util.EnumSet;

/**
* @see EmailGovernance
*/
class EmailGovernanceImpl implements EmailGovernance {
@NotNull private final EnumSet<EmailAddressCriteria> emailAddressCriteria;
@Nullable private final EmailValidator emailValidator;
@Nullable private final Pkcs12Config pkcs12ConfigForSmimeSigning;

EmailGovernanceImpl(@NotNull final EnumSet<EmailAddressCriteria> emailAddressCriteria, @Nullable final Pkcs12Config pkcs12ConfigForSmimeSigning) {
this.emailAddressCriteria = emailAddressCriteria;
EmailGovernanceImpl(@Nullable final EmailValidator emailValidator, @Nullable final Pkcs12Config pkcs12ConfigForSmimeSigning) {
this.emailValidator = emailValidator;
this.pkcs12ConfigForSmimeSigning = pkcs12ConfigForSmimeSigning;
}

@Override
public String toString() {
final StringBuilder sb = new StringBuilder("EmailGovernanceImpl{");
sb.append("emailAddressCriteria=").append(emailAddressCriteria);
sb.append("emailValidator=").append(emailValidator);
sb.append(", pkcs12ConfigForSmimeSigning=").append(pkcs12ConfigForSmimeSigning);
sb.append('}');
return sb.toString();
}

/**
* @see EmailGovernance#getEmailAddressCriteria()
* @see EmailGovernance#getEmailValidator()
*/
@Override
public @NotNull EnumSet<EmailAddressCriteria> getEmailAddressCriteria() {
return emailAddressCriteria;
public @Nullable EmailValidator getEmailValidator() {
return emailValidator;
}

/**
Expand Down
Loading

0 comments on commit 56bdcf2

Please sign in to comment.