25
25
import org .simplejavamail .internal .util .NamedDataSource ;
26
26
27
27
import java .io .UnsupportedEncodingException ;
28
+ import java .nio .charset .Charset ;
28
29
import java .nio .charset .StandardCharsets ;
29
30
import java .util .Collection ;
30
31
import java .util .Map ;
31
32
import java .util .UUID ;
32
33
33
34
import static java .lang .Boolean .TRUE ;
34
35
import static java .lang .String .format ;
36
+ import static java .nio .charset .StandardCharsets .UTF_8 ;
35
37
import static java .util .Objects .requireNonNull ;
36
38
import static java .util .Optional .ofNullable ;
37
39
import static org .simplejavamail .internal .util .MiscUtil .valueNullOrEmpty ;
@@ -45,22 +47,18 @@ public class MimeMessageHelper {
45
47
/**
46
48
* Encoding used for setting body text, email address, headers, reply-to fields etc. ({@link StandardCharsets#UTF_8}).
47
49
*/
48
- private static final String CHARACTER_ENCODING = StandardCharsets . UTF_8 . name () ;
50
+ private static final Charset CHARACTER_ENCODING = UTF_8 ;
49
51
50
52
private static final String HEADER_CONTENT_TRANSFER_ENCODING = "Content-Transfer-Encoding" ;
51
53
52
- private MimeMessageHelper () {
53
-
54
- }
55
-
56
54
static void setSubject (@ NotNull final Email email , final MimeMessage message ) throws MessagingException {
57
- message .setSubject (email .getSubject (), CHARACTER_ENCODING );
55
+ message .setSubject (email .getSubject (), CHARACTER_ENCODING . name () );
58
56
}
59
57
60
- static void setFrom (@ NotNull final Email email , final MimeMessage message ) throws UnsupportedEncodingException , MessagingException {
58
+ static void setFrom (@ NotNull final Email email , final MimeMessage message ) throws MessagingException {
61
59
val fromRecipient = email .getFromRecipient ();
62
60
if (fromRecipient != null ) {
63
- message .setFrom (new InternetAddress ( fromRecipient . getAddress (), fromRecipient . getName () , CHARACTER_ENCODING ));
61
+ message .setFrom (MiscUtil . asInternetAddress ( fromRecipient , CHARACTER_ENCODING ));
64
62
}
65
63
}
66
64
@@ -69,13 +67,12 @@ static void setFrom(@NotNull final Email email, final MimeMessage message) throw
69
67
*
70
68
* @param email The message in which the recipients are defined.
71
69
* @param message The javax message that needs to be filled with recipients.
72
- * @throws UnsupportedEncodingException See {@link InternetAddress#InternetAddress(String, String)}.
73
70
* @throws MessagingException See {@link Message#addRecipient(Message.RecipientType, Address)}
74
71
*/
75
72
static void setRecipients (final Email email , final Message message )
76
- throws UnsupportedEncodingException , MessagingException {
73
+ throws MessagingException {
77
74
for (final Recipient recipient : email .getRecipients ()) {
78
- message .addRecipient (recipient .getType (), new InternetAddress ( recipient . getAddress (), recipient . getName () , CHARACTER_ENCODING ));
75
+ message .addRecipient (recipient .getType (), MiscUtil . asInternetAddress ( recipient , CHARACTER_ENCODING ));
79
76
}
80
77
}
81
78
@@ -84,16 +81,15 @@ static void setRecipients(final Email email, final Message message)
84
81
*
85
82
* @param email The message in which the recipients are defined.
86
83
* @param message The javax message that needs to be filled with reply-to addresses.
87
- * @throws UnsupportedEncodingException See {@link InternetAddress#InternetAddress(String, String)}.
88
84
* @throws MessagingException See {@link Message#setReplyTo(Address[])}
89
85
*/
90
86
static void setReplyTo (@ NotNull final Email email , final Message message )
91
- throws UnsupportedEncodingException , MessagingException {
87
+ throws MessagingException {
92
88
if (!email .getReplyToRecipients ().isEmpty ()) {
93
89
val replyToAddresses = new Address [email .getReplyToRecipients ().size ()];
94
90
int i = 0 ;
95
91
for (val replyToRecipient : email .getReplyToRecipients ()) {
96
- replyToAddresses [i ++] = new InternetAddress ( replyToRecipient . getAddress (), replyToRecipient . getName () , CHARACTER_ENCODING );
92
+ replyToAddresses [i ++] = MiscUtil . asInternetAddress ( replyToRecipient , CHARACTER_ENCODING );
97
93
}
98
94
message .setReplyTo (replyToAddresses );
99
95
}
@@ -110,20 +106,20 @@ static void setTexts(@NotNull final Email email, final MimeMultipart multipartAl
110
106
throws MessagingException {
111
107
if (email .getPlainText () != null ) {
112
108
val messagePart = new MimeBodyPart ();
113
- messagePart .setText (email .getPlainText (), CHARACTER_ENCODING );
109
+ messagePart .setText (email .getPlainText (), CHARACTER_ENCODING . name () );
114
110
messagePart .addHeader (HEADER_CONTENT_TRANSFER_ENCODING , determineContentTransferEncoder (email ));
115
111
multipartAlternativeMessages .addBodyPart (messagePart );
116
112
}
117
113
if (email .getHTMLText () != null ) {
118
114
val messagePartHTML = new MimeBodyPart ();
119
- messagePartHTML .setContent (email .getHTMLText (), format ("text/html; charset=\" %s\" " , CHARACTER_ENCODING ));
115
+ messagePartHTML .setContent (email .getHTMLText (), format ("text/html; charset=\" %s\" " , CHARACTER_ENCODING . name () ));
120
116
messagePartHTML .addHeader (HEADER_CONTENT_TRANSFER_ENCODING , determineContentTransferEncoder (email ));
121
117
multipartAlternativeMessages .addBodyPart (messagePartHTML );
122
118
}
123
119
if (email .getCalendarText () != null ) {
124
120
val calendarMethod = requireNonNull (email .getCalendarMethod (), "calendarMethod is required when calendarText is set" );
125
121
val messagePartCalendar = new MimeBodyPart ();
126
- messagePartCalendar .setContent (email .getCalendarText (), format ("text/calendar; charset=\" %s\" ; method=\" %s\" " , CHARACTER_ENCODING , calendarMethod ));
122
+ messagePartCalendar .setContent (email .getCalendarText (), format ("text/calendar; charset=\" %s\" ; method=\" %s\" " , CHARACTER_ENCODING . name () , calendarMethod ));
127
123
messagePartCalendar .addHeader (HEADER_CONTENT_TRANSFER_ENCODING , determineContentTransferEncoder (email ));
128
124
multipartAlternativeMessages .addBodyPart (messagePartCalendar );
129
125
}
@@ -146,14 +142,14 @@ private static String determineContentTransferEncoder(@NotNull Email email) {
146
142
static void setTexts (@ NotNull final Email email , final MimePart messagePart )
147
143
throws MessagingException {
148
144
if (email .getPlainText () != null ) {
149
- messagePart .setText (email .getPlainText (), CHARACTER_ENCODING );
145
+ messagePart .setText (email .getPlainText (), CHARACTER_ENCODING . name () );
150
146
}
151
147
if (email .getHTMLText () != null ) {
152
- messagePart .setContent (email .getHTMLText (), format ("text/html; charset=\" %s\" " , CHARACTER_ENCODING ));
148
+ messagePart .setContent (email .getHTMLText (), format ("text/html; charset=\" %s\" " , CHARACTER_ENCODING . name () ));
153
149
}
154
150
if (email .getCalendarText () != null ) {
155
151
val calendarMethod = requireNonNull (email .getCalendarMethod (), "CalendarMethod must be set when CalendarText is set" );
156
- messagePart .setContent (email .getCalendarText (), format ("text/calendar; charset=\" %s\" ; method=\" %s\" " , CHARACTER_ENCODING , calendarMethod ));
152
+ messagePart .setContent (email .getCalendarText (), format ("text/calendar; charset=\" %s\" ; method=\" %s\" " , CHARACTER_ENCODING . name () , calendarMethod ));
157
153
}
158
154
messagePart .addHeader (HEADER_CONTENT_TRANSFER_ENCODING , determineContentTransferEncoder (email ));
159
155
}
@@ -225,21 +221,21 @@ static void setHeaders(@NotNull final Email email, final Message message)
225
221
226
222
if (TRUE .equals (email .getUseDispositionNotificationTo ())) {
227
223
final Recipient dispositionTo = checkNonEmptyArgument (email .getDispositionNotificationTo (), "dispositionNotificationTo" );
228
- final Address address = new InternetAddress ( dispositionTo . getAddress (), dispositionTo . getName () , CHARACTER_ENCODING );
224
+ final Address address = MiscUtil . asInternetAddress ( dispositionTo , CHARACTER_ENCODING );
229
225
message .setHeader ("Disposition-Notification-To" , address .toString ());
230
226
}
231
227
232
228
if (TRUE .equals (email .getUseReturnReceiptTo ())) {
233
229
final Recipient returnReceiptTo = checkNonEmptyArgument (email .getReturnReceiptTo (), "returnReceiptTo" );
234
- final Address address = new InternetAddress ( returnReceiptTo . getAddress (), returnReceiptTo . getName () , CHARACTER_ENCODING );
230
+ final Address address = MiscUtil . asInternetAddress ( returnReceiptTo , CHARACTER_ENCODING );
235
231
message .setHeader ("Return-Receipt-To" , address .toString ());
236
232
}
237
233
}
238
234
239
235
private static void setHeader (Message message , Map .Entry <String , Collection <String >> header ) throws UnsupportedEncodingException , MessagingException {
240
236
for (final String headerValue : header .getValue ()) {
241
237
final String headerName = header .getKey ();
242
- final String headerValueEncoded = MimeUtility .encodeText (headerValue , CHARACTER_ENCODING , null );
238
+ final String headerValueEncoded = MimeUtility .encodeText (headerValue , CHARACTER_ENCODING . name () , null );
243
239
final String foldedHeaderValue = MimeUtility .fold (headerName .length () + 2 , headerValueEncoded );
244
240
message .addHeader (header .getKey (), foldedHeaderValue );
245
241
}
0 commit comments