Skip to content

Commit 2c127d8

Browse files
committed
#456: make content transfer encoder detection more lenient
1 parent dc1dd59 commit 2c127d8

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

modules/core-module/src/main/java/org/simplejavamail/api/email/ContentTransferEncoding.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import lombok.Getter;
44
import lombok.RequiredArgsConstructor;
5+
import lombok.val;
56
import org.jetbrains.annotations.NotNull;
67

78
import java.util.Arrays;
@@ -30,10 +31,14 @@ public enum ContentTransferEncoding {
3031
private final String encoder;
3132

3233
public static ContentTransferEncoding byEncoder(@NotNull final String encoder) {
33-
return Arrays.stream(values())
34-
.filter(c -> c.encoder.equalsIgnoreCase(encoder))
35-
.findFirst()
36-
.orElseThrow(() -> new IllegalArgumentException("unknown content transfer encoder: " + encoder));
34+
try {
35+
return ContentTransferEncoding.valueOf(encoder.replaceAll("-", "_").toUpperCase());
36+
} catch (IllegalArgumentException e) {
37+
return Arrays.stream(values())
38+
.filter(c -> c.encoder.equalsIgnoreCase(encoder.replaceAll("_", "-")))
39+
.findFirst()
40+
.orElseThrow(() -> new IllegalArgumentException("unknown content transfer encoder: " + encoder));
41+
}
3742
}
3843

3944
@Override
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.simplejavamail.api.email;
2+
3+
import org.junit.Test;
4+
5+
import static org.assertj.core.api.Assertions.assertThat;
6+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
7+
8+
public class ContentTransferEncodingTest {
9+
10+
@Test
11+
public void byEncoder() {
12+
assertThat(ContentTransferEncoding.byEncoder("BASE_64")).isEqualTo(ContentTransferEncoding.BASE_64);
13+
assertThat(ContentTransferEncoding.byEncoder("B")).isEqualTo(ContentTransferEncoding.B);
14+
assertThat(ContentTransferEncoding.byEncoder("b")).isEqualTo(ContentTransferEncoding.B);
15+
assertThat(ContentTransferEncoding.byEncoder("x-uuencode")).isEqualTo(ContentTransferEncoding.X_UU);
16+
assertThat(ContentTransferEncoding.byEncoder("x_uuencode")).isEqualTo(ContentTransferEncoding.X_UU);
17+
assertThat(ContentTransferEncoding.byEncoder("QUOTED-PRINTABLE")).isEqualTo(ContentTransferEncoding.QUOTED_PRINTABLE);
18+
assertThatThrownBy(() -> ContentTransferEncoding.byEncoder("moomoo"))
19+
.isInstanceOf(IllegalArgumentException.class)
20+
.hasMessage("unknown content transfer encoder: moomoo");
21+
}
22+
}

0 commit comments

Comments
 (0)