2525import org .simplejavamail .internal .util .NamedDataSource ;
2626
2727import java .io .UnsupportedEncodingException ;
28+ import java .nio .charset .Charset ;
2829import java .nio .charset .StandardCharsets ;
2930import java .util .Collection ;
3031import java .util .Map ;
3132import java .util .UUID ;
3233
3334import static java .lang .Boolean .TRUE ;
3435import static java .lang .String .format ;
36+ import static java .nio .charset .StandardCharsets .UTF_8 ;
3537import static java .util .Objects .requireNonNull ;
3638import static java .util .Optional .ofNullable ;
3739import static org .simplejavamail .internal .util .MiscUtil .valueNullOrEmpty ;
@@ -45,22 +47,18 @@ public class MimeMessageHelper {
4547 /**
4648 * Encoding used for setting body text, email address, headers, reply-to fields etc. ({@link StandardCharsets#UTF_8}).
4749 */
48- private static final String CHARACTER_ENCODING = StandardCharsets . UTF_8 . name () ;
50+ private static final Charset CHARACTER_ENCODING = UTF_8 ;
4951
5052 private static final String HEADER_CONTENT_TRANSFER_ENCODING = "Content-Transfer-Encoding" ;
5153
52- private MimeMessageHelper () {
53-
54- }
55-
5654 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 () );
5856 }
5957
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 {
6159 val fromRecipient = email .getFromRecipient ();
6260 if (fromRecipient != null ) {
63- message .setFrom (new InternetAddress ( fromRecipient . getAddress (), fromRecipient . getName () , CHARACTER_ENCODING ));
61+ message .setFrom (MiscUtil . asInternetAddress ( fromRecipient , CHARACTER_ENCODING ));
6462 }
6563 }
6664
@@ -69,13 +67,12 @@ static void setFrom(@NotNull final Email email, final MimeMessage message) throw
6967 *
7068 * @param email The message in which the recipients are defined.
7169 * @param message The javax message that needs to be filled with recipients.
72- * @throws UnsupportedEncodingException See {@link InternetAddress#InternetAddress(String, String)}.
7370 * @throws MessagingException See {@link Message#addRecipient(Message.RecipientType, Address)}
7471 */
7572 static void setRecipients (final Email email , final Message message )
76- throws UnsupportedEncodingException , MessagingException {
73+ throws MessagingException {
7774 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 ));
7976 }
8077 }
8178
@@ -84,16 +81,15 @@ static void setRecipients(final Email email, final Message message)
8481 *
8582 * @param email The message in which the recipients are defined.
8683 * @param message The javax message that needs to be filled with reply-to addresses.
87- * @throws UnsupportedEncodingException See {@link InternetAddress#InternetAddress(String, String)}.
8884 * @throws MessagingException See {@link Message#setReplyTo(Address[])}
8985 */
9086 static void setReplyTo (@ NotNull final Email email , final Message message )
91- throws UnsupportedEncodingException , MessagingException {
87+ throws MessagingException {
9288 if (!email .getReplyToRecipients ().isEmpty ()) {
9389 val replyToAddresses = new Address [email .getReplyToRecipients ().size ()];
9490 int i = 0 ;
9591 for (val replyToRecipient : email .getReplyToRecipients ()) {
96- replyToAddresses [i ++] = new InternetAddress ( replyToRecipient . getAddress (), replyToRecipient . getName () , CHARACTER_ENCODING );
92+ replyToAddresses [i ++] = MiscUtil . asInternetAddress ( replyToRecipient , CHARACTER_ENCODING );
9793 }
9894 message .setReplyTo (replyToAddresses );
9995 }
@@ -110,20 +106,20 @@ static void setTexts(@NotNull final Email email, final MimeMultipart multipartAl
110106 throws MessagingException {
111107 if (email .getPlainText () != null ) {
112108 val messagePart = new MimeBodyPart ();
113- messagePart .setText (email .getPlainText (), CHARACTER_ENCODING );
109+ messagePart .setText (email .getPlainText (), CHARACTER_ENCODING . name () );
114110 messagePart .addHeader (HEADER_CONTENT_TRANSFER_ENCODING , determineContentTransferEncoder (email ));
115111 multipartAlternativeMessages .addBodyPart (messagePart );
116112 }
117113 if (email .getHTMLText () != null ) {
118114 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 () ));
120116 messagePartHTML .addHeader (HEADER_CONTENT_TRANSFER_ENCODING , determineContentTransferEncoder (email ));
121117 multipartAlternativeMessages .addBodyPart (messagePartHTML );
122118 }
123119 if (email .getCalendarText () != null ) {
124120 val calendarMethod = requireNonNull (email .getCalendarMethod (), "calendarMethod is required when calendarText is set" );
125121 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 ));
127123 messagePartCalendar .addHeader (HEADER_CONTENT_TRANSFER_ENCODING , determineContentTransferEncoder (email ));
128124 multipartAlternativeMessages .addBodyPart (messagePartCalendar );
129125 }
@@ -146,14 +142,14 @@ private static String determineContentTransferEncoder(@NotNull Email email) {
146142 static void setTexts (@ NotNull final Email email , final MimePart messagePart )
147143 throws MessagingException {
148144 if (email .getPlainText () != null ) {
149- messagePart .setText (email .getPlainText (), CHARACTER_ENCODING );
145+ messagePart .setText (email .getPlainText (), CHARACTER_ENCODING . name () );
150146 }
151147 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 () ));
153149 }
154150 if (email .getCalendarText () != null ) {
155151 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 ));
157153 }
158154 messagePart .addHeader (HEADER_CONTENT_TRANSFER_ENCODING , determineContentTransferEncoder (email ));
159155 }
@@ -225,21 +221,21 @@ static void setHeaders(@NotNull final Email email, final Message message)
225221
226222 if (TRUE .equals (email .getUseDispositionNotificationTo ())) {
227223 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 );
229225 message .setHeader ("Disposition-Notification-To" , address .toString ());
230226 }
231227
232228 if (TRUE .equals (email .getUseReturnReceiptTo ())) {
233229 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 );
235231 message .setHeader ("Return-Receipt-To" , address .toString ());
236232 }
237233 }
238234
239235 private static void setHeader (Message message , Map .Entry <String , Collection <String >> header ) throws UnsupportedEncodingException , MessagingException {
240236 for (final String headerValue : header .getValue ()) {
241237 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 );
243239 final String foldedHeaderValue = MimeUtility .fold (headerName .length () + 2 , headerValueEncoded );
244240 message .addHeader (header .getKey (), foldedHeaderValue );
245241 }
0 commit comments