Skip to content

Commit 56bdcf2

Browse files
committed
#319: Switched from email-rfc2822-validator to jmail
1 parent 5d166fa commit 56bdcf2

File tree

11 files changed

+147
-161
lines changed

11 files changed

+147
-161
lines changed

modules/core-module/pom.xml

+3-3
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@
4747
</dependency>
4848

4949
<dependency>
50-
<groupId>com.github.bbottema</groupId>
51-
<artifactId>emailaddress-rfc2822</artifactId>
52-
<version>2.2.0</version>
50+
<groupId>com.sanctionco.jmail</groupId>
51+
<artifactId>jmail</artifactId>
52+
<version>1.2.1</version>
5353
</dependency>
5454

5555
<dependency><!-- Annotation processor -->

modules/core-module/src/main/java/org/simplejavamail/api/mailer/Mailer.java

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package org.simplejavamail.api.mailer;
22

3-
import org.hazlewood.connor.bottema.emailaddress.EmailAddressCriteria;
4-
import org.hazlewood.connor.bottema.emailaddress.EmailAddressValidator;
53
import org.jetbrains.annotations.NotNull;
64
import org.jetbrains.annotations.Nullable;
75
import org.simplejavamail.MailException;
@@ -103,7 +101,7 @@ public interface Mailer {
103101
*
104102
* @return Always <code>true</code> (throws a {@link MailException} exception if validation fails).
105103
* @throws MailException Is being thrown in any of the above causes.
106-
* @see EmailAddressValidator
104+
* @see com.sanctionco.jmail.EmailValidator
107105
*/
108106
@SuppressWarnings({"SameReturnValue" })
109107
boolean validate(Email email) throws MailException;
@@ -130,7 +128,7 @@ public interface Mailer {
130128
/**
131129
* @return The transport strategy to be used. Will be {@code null} in case a custom fixed {@link Session} instance is used.
132130
* @see org.simplejavamail.api.mailer.MailerRegularBuilder#withTransportStrategy(TransportStrategy)
133-
* @see EmailAddressCriteria
131+
* @see com.sanctionco.jmail.EmailValidator
134132
*/
135133
@Nullable
136134
TransportStrategy getTransportStrategy();
@@ -148,7 +146,7 @@ public interface Mailer {
148146
OperationalConfig getOperationalConfig();
149147

150148
/**
151-
* @return The effective governance applied to each email (default S/MIME signing, email addresscriteria for validation etc.).
149+
* @return The effective governance applied to each email (default S/MIME signing, email validator etc.).
152150
*/
153151
@NotNull
154152
EmailGovernance getEmailGovernance();

modules/core-module/src/main/java/org/simplejavamail/api/mailer/MailerGenericBuilder.java

+18-18
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.simplejavamail.api.mailer;
22

3-
import org.hazlewood.connor.bottema.emailaddress.EmailAddressCriteria;
3+
import com.sanctionco.jmail.EmailValidator;
4+
import com.sanctionco.jmail.JMail;
45
import org.jetbrains.annotations.NotNull;
56
import org.jetbrains.annotations.Nullable;
67
import org.simplejavamail.api.internal.clisupport.model.Cli;
@@ -12,7 +13,6 @@
1213
import javax.mail.Session;
1314
import java.io.File;
1415
import java.io.InputStream;
15-
import java.util.EnumSet;
1616
import java.util.List;
1717
import java.util.Map;
1818
import java.util.Properties;
@@ -219,15 +219,15 @@ public interface MailerGenericBuilder<T extends MailerGenericBuilder<?>> {
219219
T withSessionTimeout(@NotNull Integer sessionTimeout);
220220

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

232232
/**
233233
* 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
@@ -503,12 +503,12 @@ public interface MailerGenericBuilder<T extends MailerGenericBuilder<?>> {
503503
T resetSessionTimeout();
504504

505505
/**
506-
* Resets emailAddressCriteria to {@link EmailAddressCriteria#RFC_COMPLIANT}.
506+
* Resets the email validator to {@link JMail#strictValidator()}.
507507
*
508-
* @see #withEmailAddressCriteria(EnumSet)
509-
* @see #clearEmailAddressCriteria()
508+
* @see #withEmailValidator(EmailValidator)
509+
* @see #clearEmailValidator()
510510
*/
511-
T resetEmailAddressCriteria();
511+
T resetEmailValidator();
512512

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

625625
/**
626-
* Removes all email address criteria, meaning validation won't take place.
626+
* Makes the email validator <code>null</code>, meaning validation won't take place.
627627
*
628-
* @see #withEmailAddressCriteria(EnumSet)
629-
* @see #resetEmailAddressCriteria()
628+
* @see #withEmailValidator(EmailValidator)
629+
* @see #resetEmailValidator()
630630
*/
631-
T clearEmailAddressCriteria();
631+
T clearEmailValidator();
632632

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

705705
/**
706-
* @see #withEmailAddressCriteria(EnumSet)
706+
* @see #withEmailValidator(EmailValidator)
707707
*/
708708
@Nullable
709-
EnumSet<EmailAddressCriteria> getEmailAddressCriteria();
709+
EmailValidator getEmailValidator();
710710

711711
/**
712712
* @see #signByDefaultWithSmime(Pkcs12Config)
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
package org.simplejavamail.api.mailer.config;
22

3-
import org.hazlewood.connor.bottema.emailaddress.EmailAddressCriteria;
4-
import org.jetbrains.annotations.NotNull;
3+
import com.sanctionco.jmail.EmailValidator;
54
import org.jetbrains.annotations.Nullable;
65
import org.simplejavamail.api.email.EmailPopulatingBuilder;
76
import org.simplejavamail.api.mailer.MailerGenericBuilder;
87

98
import java.io.InputStream;
10-
import java.util.EnumSet;
119

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

2018
/**
21-
* @return The effective validation criteria used for email validation. Returns an empty set if no validation should be done.
22-
* @see MailerGenericBuilder#withEmailAddressCriteria(EnumSet)
23-
* @see EmailAddressCriteria
19+
* @return The effective email validator used for email validation. Can be <code>null</code> if no validation should be done.
20+
* @see MailerGenericBuilder#withEmailValidator(EmailValidator)
21+
* @see EmailValidator
2422
*/
25-
@NotNull
26-
EnumSet<EmailAddressCriteria> getEmailAddressCriteria();
23+
@Nullable
24+
EmailValidator getEmailValidator();
2725

2826
/**
2927
* @see EmailPopulatingBuilder#signWithSmime(Pkcs12Config)
@@ -33,4 +31,4 @@ public interface EmailGovernance {
3331
*/
3432
@Nullable
3533
Pkcs12Config getPkcs12ConfigForSmimeSigning();
36-
}
34+
}

modules/simple-java-mail/src/main/java/org/simplejavamail/mailer/MailerHelper.java

+15-17
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.simplejavamail.mailer;
22

3-
import org.hazlewood.connor.bottema.emailaddress.EmailAddressCriteria;
4-
import org.hazlewood.connor.bottema.emailaddress.EmailAddressValidator;
3+
import com.sanctionco.jmail.EmailValidator;
54
import org.jetbrains.annotations.NotNull;
65
import org.jetbrains.annotations.Nullable;
76
import org.simplejavamail.MailException;
@@ -16,7 +15,6 @@
1615
import javax.mail.internet.MimeMessage;
1716
import javax.mail.internet.MimeUtility;
1817
import java.util.Collection;
19-
import java.util.EnumSet;
2018
import java.util.Map;
2119

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

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

@@ -47,30 +45,30 @@ public static boolean validate(@NotNull final Email email, @NotNull final EnumSe
4745
} else if (email.isUseReturnReceiptTo() && email.getReturnReceiptTo() == null) {
4846
throw new MailValidationException(MailValidationException.MISSING_RETURNRECEIPTTO);
4947
} else
50-
if (!emailAddressCriteria.isEmpty()) {
51-
if (!EmailAddressValidator.isValid(email.getFromRecipient().getAddress(), emailAddressCriteria)) {
48+
if (emailValidator != null) {
49+
if (!emailValidator.isValid(email.getFromRecipient().getAddress())) {
5250
throw new MailValidationException(format(MailValidationException.INVALID_SENDER, email));
5351
}
5452
for (final Recipient recipient : email.getRecipients()) {
55-
if (!EmailAddressValidator.isValid(recipient.getAddress(), emailAddressCriteria)) {
53+
if (!emailValidator.isValid(recipient.getAddress())) {
5654
throw new MailValidationException(format(MailValidationException.INVALID_RECIPIENT, email));
5755
}
5856
}
59-
if (email.getReplyToRecipient() != null && !EmailAddressValidator
60-
.isValid(email.getReplyToRecipient().getAddress(), emailAddressCriteria)) {
57+
if (email.getReplyToRecipient() != null && !emailValidator.isValid(email.getReplyToRecipient().getAddress())) {
6158
throw new MailValidationException(format(MailValidationException.INVALID_REPLYTO, email));
6259
}
63-
if (email.getBounceToRecipient() != null && !EmailAddressValidator
64-
.isValid(email.getBounceToRecipient().getAddress(), emailAddressCriteria)) {
60+
if (email.getBounceToRecipient() != null && !emailValidator.isValid(email.getBounceToRecipient().getAddress())) {
6561
throw new MailValidationException(format(MailValidationException.INVALID_BOUNCETO, email));
6662
}
67-
if (email.isUseDispositionNotificationTo() && !EmailAddressValidator
68-
.isValid(checkNonEmptyArgument(email.getDispositionNotificationTo(), "dispositionNotificationTo").getAddress(), emailAddressCriteria)) {
69-
throw new MailValidationException(format(MailValidationException.INVALID_DISPOSITIONNOTIFICATIONTO, email));
63+
if (email.isUseDispositionNotificationTo()) {
64+
if (!emailValidator.isValid(checkNonEmptyArgument(email.getDispositionNotificationTo(), "dispositionNotificationTo").getAddress())) {
65+
throw new MailValidationException(format(MailValidationException.INVALID_DISPOSITIONNOTIFICATIONTO, email));
66+
}
7067
}
71-
if (email.isUseReturnReceiptTo() && !EmailAddressValidator
72-
.isValid(checkNonEmptyArgument(email.getReturnReceiptTo(), "returnReceiptTo").getAddress(), emailAddressCriteria)) {
73-
throw new MailValidationException(format(MailValidationException.INVALID_RETURNRECEIPTTO, email));
68+
if (email.isUseReturnReceiptTo()) {
69+
if (!emailValidator.isValid(checkNonEmptyArgument(email.getReturnReceiptTo(), "returnReceiptTo").getAddress())) {
70+
throw new MailValidationException(format(MailValidationException.INVALID_RETURNRECEIPTTO, email));
71+
}
7472
}
7573
}
7674

modules/simple-java-mail/src/main/java/org/simplejavamail/mailer/internal/EmailGovernanceImpl.java

+8-11
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,37 @@
11
package org.simplejavamail.mailer.internal;
22

3-
import org.hazlewood.connor.bottema.emailaddress.EmailAddressCriteria;
4-
import org.jetbrains.annotations.NotNull;
3+
import com.sanctionco.jmail.EmailValidator;
54
import org.jetbrains.annotations.Nullable;
65
import org.simplejavamail.api.mailer.config.EmailGovernance;
76
import org.simplejavamail.api.mailer.config.Pkcs12Config;
87

9-
import java.util.EnumSet;
10-
118
/**
129
* @see EmailGovernance
1310
*/
1411
class EmailGovernanceImpl implements EmailGovernance {
15-
@NotNull private final EnumSet<EmailAddressCriteria> emailAddressCriteria;
12+
@Nullable private final EmailValidator emailValidator;
1613
@Nullable private final Pkcs12Config pkcs12ConfigForSmimeSigning;
1714

18-
EmailGovernanceImpl(@NotNull final EnumSet<EmailAddressCriteria> emailAddressCriteria, @Nullable final Pkcs12Config pkcs12ConfigForSmimeSigning) {
19-
this.emailAddressCriteria = emailAddressCriteria;
15+
EmailGovernanceImpl(@Nullable final EmailValidator emailValidator, @Nullable final Pkcs12Config pkcs12ConfigForSmimeSigning) {
16+
this.emailValidator = emailValidator;
2017
this.pkcs12ConfigForSmimeSigning = pkcs12ConfigForSmimeSigning;
2118
}
2219

2320
@Override
2421
public String toString() {
2522
final StringBuilder sb = new StringBuilder("EmailGovernanceImpl{");
26-
sb.append("emailAddressCriteria=").append(emailAddressCriteria);
23+
sb.append("emailValidator=").append(emailValidator);
2724
sb.append(", pkcs12ConfigForSmimeSigning=").append(pkcs12ConfigForSmimeSigning);
2825
sb.append('}');
2926
return sb.toString();
3027
}
3128

3229
/**
33-
* @see EmailGovernance#getEmailAddressCriteria()
30+
* @see EmailGovernance#getEmailValidator()
3431
*/
3532
@Override
36-
public @NotNull EnumSet<EmailAddressCriteria> getEmailAddressCriteria() {
37-
return emailAddressCriteria;
33+
public @Nullable EmailValidator getEmailValidator() {
34+
return emailValidator;
3835
}
3936

4037
/**

0 commit comments

Comments
 (0)