Skip to content

Commit a82787c

Browse files
committed
skip email address validation by default, can be turned on
1 parent a74b24d commit a82787c

File tree

3 files changed

+24
-17
lines changed

3 files changed

+24
-17
lines changed

Diff for: src/main/java/org/codemonkey/simplejavamail/EmailAddressValidationCriteria.java

+10-4
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,17 @@
88
* @see #EmailAddressValidationCriteria(boolean, boolean)
99
*/
1010
public class EmailAddressValidationCriteria {
11+
1112
private final boolean allowDomainLiterals;
1213
private final boolean allowQuotedIdentifiers;
1314

15+
/**
16+
* Criteria which is most RFC 2822 compliant and allows all compiant address forms, including the more exotic ones.
17+
*
18+
* @see #EmailAddressValidationCriteria(boolean, boolean)
19+
*/
20+
public static final EmailAddressValidationCriteria RFC_COMPLIANT = new EmailAddressValidationCriteria(true, true);
21+
1422
/**
1523
* @param allowDomainLiterals <ul>
1624
* <li>This flag states whether domain literals are allowed in the email address, e.g.:
@@ -25,8 +33,7 @@ public class EmailAddressValidationCriteria {
2533
* change this constant to <tt>false</tt>.
2634
* <p>
2735
* Its default value is <tt>true</tt> to remain RFC 2822 compliant, but you should set it depending on what you need for your
28-
* application.
29-
* </li>
36+
* application.</li>
3037
* </ul>
3138
* @param allowQuotedIdentifiers <ul>
3239
* <li>This flag states whether quoted identifiers are allowed (using quotes and angle brackets around the raw address) are
@@ -39,8 +46,7 @@ public class EmailAddressValidationCriteria {
3946
* <tt>false</tt>.
4047
* <p>
4148
* Its default value is <tt>true</tt> to remain RFC 2822 compliant, but you should set it depending on what you need for your
42-
* application.
43-
* </li>
49+
* application.</li>
4450
* </ul>
4551
*/
4652
public EmailAddressValidationCriteria(boolean allowDomainLiterals, boolean allowQuotedIdentifiers) {

Diff for: src/main/java/org/codemonkey/simplejavamail/EmailValidationUtil.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@ private EmailValidationUtil() {
3737
*
3838
* @param email A complete email address.
3939
* @return Whether the e-mail address is compliant with RFC 2822.
40-
* @see EmailAddressValidationCriteria#EmailAddressValidationCriteria(boolean, boolean)
40+
* @see EmailAddressValidationCriteria#RFC_COMPLIANT
4141
*/
4242
public static boolean isValid(final String email) {
43-
return isValid(email, new EmailAddressValidationCriteria(true, true));
43+
return isValid(email, EmailAddressValidationCriteria.RFC_COMPLIANT);
4444
}
4545

4646
/**
@@ -49,7 +49,7 @@ public static boolean isValid(final String email) {
4949
* @param email A complete email address.
5050
* @param emailAddressValidationCriteria A set of flags that restrict or relax RFC 2822 compliance.
5151
* @return Whether the e-mail address is compliant with RFC 2822, configured using the passed in {@link EmailAddressValidationCriteria}.
52-
* @see EmailAddressValidationCriteria#EmailAddressValidationCriteria(boolean, boolean)
52+
* @see EmailAddressValidationCriteria#RFC_COMPLIANT
5353
*/
5454
public static boolean isValid(final String email, final EmailAddressValidationCriteria emailAddressValidationCriteria) {
5555
return buildValidEmailPattern(emailAddressValidationCriteria).matcher(email).matches();

Diff for: src/main/java/org/codemonkey/simplejavamail/Mailer.java

+11-10
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
public class Mailer {
7070

7171
private static final Logger logger = LoggerFactory.getLogger(Mailer.class);
72-
72+
7373
/**
7474
* Encoding used for setting body text, email address, headers, reply-to fields etc. ({@value #CHARACTER_ENCODING}).
7575
*/
@@ -101,22 +101,22 @@ public class Mailer {
101101
* Default constructor, stores the given mail session for later use. Assumes that *all* properties used to make a connection are
102102
* configured (host, port, authentication and transport protocol settings).
103103
* <p>
104-
* Also defines a default email address validation criteria object, which remains true to RFC 2822, meaning allowing both domain
105-
* literals and quoted identifiers (see {@link EmailAddressValidationCriteria#EmailAddressValidationCriteria(boolean, boolean)}).
104+
* Also leaves email address validation criteria empty so that no validation is being performed. Validation errors will come from the
105+
* smtp server instead.
106106
*
107107
* @param session A preconfigured mail {@link Session} object with which a {@link Message} can be produced.
108108
*/
109109
public Mailer(final Session session) {
110110
this.session = session;
111-
this.emailAddressValidationCriteria = new EmailAddressValidationCriteria(true, true);
111+
this.emailAddressValidationCriteria = null;
112112
}
113113

114114
/**
115115
* Overloaded constructor which produces a new {@link Session} on the fly. Use this if you don't have a mail session configured in your
116116
* web container, or Spring context etc.
117117
* <p>
118-
* Also defines a default email address validation criteria object, which remains true to RFC 2822, meaning allowing both domain
119-
* literals and quoted identifiers (see {@link EmailAddressValidationCriteria#EmailAddressValidationCriteria(boolean, boolean)}).
118+
* Also leaves email address validation criteria empty so that no validation is being performed. Validation errors will come from the
119+
* smtp server instead.
120120
*
121121
* @param host The address URL of the SMTP server to be used.
122122
* @param port The port of the SMTP server.
@@ -134,7 +134,7 @@ public Mailer(final String host, final Integer port, final String username, fina
134134
}
135135
this.transportStrategy = transportStrategy;
136136
this.session = createMailSession(host, port, username, password);
137-
this.emailAddressValidationCriteria = new EmailAddressValidationCriteria(true, true);
137+
this.emailAddressValidationCriteria = null;
138138
}
139139

140140
/**
@@ -287,7 +287,7 @@ public boolean validate(final Email email)
287287
throw new MailException(MailException.MISSING_RECIPIENT);
288288
} else if (email.getFromRecipient() == null) {
289289
throw new MailException(MailException.MISSING_SENDER);
290-
} else {
290+
} else if (emailAddressValidationCriteria != null) {
291291
if (!EmailValidationUtil.isValid(email.getFromRecipient().getAddress(), emailAddressValidationCriteria)) {
292292
throw new MailException(String.format(MailException.INVALID_SENDER, email));
293293
}
@@ -362,7 +362,8 @@ private void setReplyTo(final Email email, final Message message)
362362
throws UnsupportedEncodingException, MessagingException {
363363
final Recipient replyToRecipient = email.getReplyToRecipient();
364364
if (replyToRecipient != null) {
365-
InternetAddress replyToAddress = new InternetAddress(replyToRecipient.getAddress(), replyToRecipient.getName(), CHARACTER_ENCODING);
365+
InternetAddress replyToAddress = new InternetAddress(replyToRecipient.getAddress(), replyToRecipient.getName(),
366+
CHARACTER_ENCODING);
366367
message.setReplyTo(new Address[] { replyToAddress });
367368
}
368369
}
@@ -516,7 +517,7 @@ private class MimeEmailMessageWrapper {
516517

517518
/**
518519
* Overrides the default email address validation restrictions when validating and sending emails using the current <code>Mailer</code>
519-
* instance.
520+
* instance. By default no validation will be performed by simple-java-mail, until a criteria object has been set.
520521
*
521522
* @param emailAddressValidationCriteria Refer to
522523
* {@link EmailAddressValidationCriteria#EmailAddressValidationCriteria(boolean, boolean)}.

0 commit comments

Comments
 (0)