Skip to content

Commit

Permalink
Add normalize method (#51)
Browse files Browse the repository at this point in the history
  • Loading branch information
RohanNagar committed Jan 19, 2022
1 parent 96fdcbf commit 011d878
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 4 deletions.
10 changes: 10 additions & 0 deletions README.md
Expand Up @@ -172,6 +172,16 @@ JMail.tryParse("test@example.com")
() -> log.error("Could not send email to invalid email"));
```

#### Get a normalized version of the email address

```java
// Get a normalized email address without any comments
String normalized = JMail.tryParse("admin(comment)@mysite.org")
.map(Email::normalized);

// normalized == "admin@mysite.org"
```

### Additional Validation Rules

#### Disallow IP Address Domain
Expand Down
16 changes: 16 additions & 0 deletions src/main/java/com/sanctionco/jmail/Email.java
Expand Up @@ -196,6 +196,22 @@ public TopLevelDomain topLevelDomain() {
return tld;
}

/**
* Return a "normalized" version of this email address. The normalized version
* is the same as the original email address, except that all comments and optional
* parts (identifiers, source routing) are removed. For example, the address
* {@code "test@(comment)example.com"} will return {@code "test@example.com"}.
*
* @return the normalized version of this email address
*/
public String normalized() {
String domain = isIpAddress
? "[" + this.domainWithoutComments + "]"
: this.domainWithoutComments;

return localPartWithoutComments + "@" + domain;
}

/**
* Get the string value of this email address. For example, the address
* {@code "test@example.com"} will return {@code "test@example.com"}.
Expand Down
19 changes: 19 additions & 0 deletions src/test/java/com/sanctionco/jmail/EmailTest.java
Expand Up @@ -22,4 +22,23 @@ void staticConstructorParses() {
assertThat(Email.of("invalid"))
.isNotPresent();
}

@Test
void ensureNormalizedIsCorrectForIpAddressEmail() {
String address = "aaa@[123.123.123.123]";

assertThat(Email.of(address))
.isPresent().get()
.returns(address, Email::normalized);
}

@Test
void ensureNormalizedIsCorrectForLongComment() {
String address = "first(Welcome to
 the (\"wonderful\" (!)) world
 of email)"
+ "@test.org";

assertThat(Email.of(address))
.isPresent().get()
.returns("first@test.org", Email::normalized);
}
}
13 changes: 9 additions & 4 deletions src/test/java/com/sanctionco/jmail/JMailTest.java
Expand Up @@ -89,7 +89,8 @@ void tryParseSetsCommentFields() {
.returns("example.com", Email::domainWithoutComments)
.returns(Arrays.asList("hello", "world"), Email::comments)
.returns(Arrays.asList("example", "com"), Email::domainParts)
.returns(TopLevelDomain.DOT_COM, Email::topLevelDomain);
.returns(TopLevelDomain.DOT_COM, Email::topLevelDomain)
.returns("test@example.com", Email::normalized);
}

@Test
Expand All @@ -114,7 +115,8 @@ void addressWithSourceRoutingValidates() {
.returns("final.domain", Email::domain)
.returns(Arrays.asList("final", "domain"), Email::domainParts)
.returns(TopLevelDomain.fromString("domain"), Email::topLevelDomain)
.returns(Arrays.asList("1st.relay", "2nd.relay"), Email::explicitSourceRoutes);
.returns(Arrays.asList("1st.relay", "2nd.relay"), Email::explicitSourceRoutes)
.returns("user@final.domain", Email::normalized);
}

@ParameterizedTest(name = "{0}")
Expand Down Expand Up @@ -145,19 +147,22 @@ void ensureIdentifiersAreParsed() {
assertThat(JMail.tryParse(one)).isPresent().get()
.hasToString(one)
.returns(true, Email::hasIdentifier)
.returns("John Smith ", Email::identifier);
.returns("John Smith ", Email::identifier)
.returns("test@te.ex", Email::normalized);

String two = "Admin<admin@te.ex>";

assertThat(JMail.tryParse(two)).isPresent().get()
.hasToString(two)
.returns(true, Email::hasIdentifier)
.returns("Admin", Email::identifier);
.returns("Admin", Email::identifier)
.returns("admin@te.ex", Email::normalized);

String none = "user@te.ex";

assertThat(JMail.tryParse(none)).isPresent().get()
.hasToString(none)
.returns(none, Email::normalized)
.returns(false, Email::hasIdentifier)
.extracting("identifier")
.isNull();
Expand Down

0 comments on commit 011d878

Please sign in to comment.