66package io .jooby .internal .email ;
77
88import com .typesafe .config .Config ;
9+ import io .jooby .SneakyThrows ;
910import org .apache .commons .mail .Email ;
1011import org .apache .commons .mail .HtmlEmail ;
12+ import org .apache .commons .mail .ImageHtmlEmail ;
13+ import org .apache .commons .mail .MultiPartEmail ;
14+ import org .apache .commons .mail .SimpleEmail ;
1115
1216import javax .mail .internet .AddressException ;
1317import javax .mail .internet .InternetAddress ;
2024
2125public class EmailFactory {
2226
23- private interface EmailSetter {
24- void apply (String p ) throws Exception ;
25- }
26-
2727 private final Config mail ;
2828
2929 public EmailFactory (final Config mail ) {
3030 this .mail = requireNonNull (mail , "Mail config is required." );
3131 }
3232
33+ public SimpleEmail newSimpleEmail () {
34+ return newEmail (new SimpleEmail ());
35+ }
36+
37+ public HtmlEmail newHtmlEmail () {
38+ return newEmail (new HtmlEmail ());
39+ }
40+
41+ public MultiPartEmail newMultiPartEmail () {
42+ return newEmail (new MultiPartEmail ());
43+ }
44+
45+ public ImageHtmlEmail newImageHtmlEmail () {
46+ return newEmail (new ImageHtmlEmail ());
47+ }
48+
3349 public <T extends Email > T newEmail (final T email ) {
34- try {
35- ifset ("username" , p -> email .setAuthentication (mail .getString (p ), mail .getString ("password" )));
36-
37- ifset ("bcc" , p -> email .setBcc (address (strList (p ))));
38- ifset ("bounceAddress" , p -> email .setBounceAddress (mail .getString (p )));
39- ifset ("cc" , p -> email .setCc (address (strList (p ))));
40- email .setCharset (mail .getString ("charset" ));
41- ifset ("debug" , p -> email .setDebug (mail .getBoolean (p )));
42- ifset ("from" , p -> email .setFrom (mail .getString (p )));
43- ifset ("hostName" , p -> email .setHostName (mail .getString (p )));
44- ifset ("msg" , p -> {
45- if (email instanceof HtmlEmail ) {
46- ((HtmlEmail ) email ).setHtmlMsg (mail .getString (p ));
47- } else {
48- email .setMsg (mail .getString (p ));
49- }
50- });
51- ifset ("replyTo" , p -> email .setReplyTo (address (mail .getStringList (p ))));
52- ifset ("sendPartial" , p -> email .setSendPartial (mail .getBoolean (p )));
53- ifset ("smtpPort" , p -> email .setSmtpPort (mail .getInt (p )));
54- ifset ("socketConnectionTimeout" ,
55- p -> email .setSocketConnectionTimeout ((int ) mail .getDuration (p , TimeUnit .MILLISECONDS )));
56- ifset ("socketTimeout" ,
57- p -> email .setSocketTimeout ((int ) mail .getDuration (p , TimeUnit .MILLISECONDS )));
58- ifset ("ssl.checkServerIdentity" , p -> email .setSSLCheckServerIdentity (mail .getBoolean (p )));
59- ifset ("ssl.onConnect" , p -> email .setSSLOnConnect (mail .getBoolean (p )));
60- ifset ("ssl.smtpPort" , p -> email .setSslSmtpPort (mail .getString (p )));
61- ifset ("startTLSEnabled" , p -> email .setStartTLSEnabled (mail .getBoolean (p )));
62- ifset ("startTLSRequired" , p -> email .setStartTLSRequired (mail .getBoolean (p )));
63- ifset ("subject" , p -> email .setSubject (mail .getString (p )));
64- ifset ("to" , p -> email .setTo (address (strList (p ))));
65-
66- return email ;
67- } catch (Exception ex ) {
68- throw new IllegalArgumentException (ex );
69- }
50+ ifset ("username" , p -> email .setAuthentication (mail .getString (p ), mail .getString ("password" )));
51+
52+ ifset ("bcc" , p -> email .setBcc (address (strList (p ))));
53+ ifset ("bounceAddress" , p -> email .setBounceAddress (mail .getString (p )));
54+ ifset ("cc" , p -> email .setCc (address (strList (p ))));
55+ email .setCharset (mail .getString ("charset" ));
56+ ifset ("debug" , p -> email .setDebug (mail .getBoolean (p )));
57+ ifset ("from" , p -> email .setFrom (mail .getString (p )));
58+ ifset ("hostName" , p -> email .setHostName (mail .getString (p )));
59+ ifset ("msg" , p -> {
60+ if (email instanceof HtmlEmail ) {
61+ ((HtmlEmail ) email ).setHtmlMsg (mail .getString (p ));
62+ } else {
63+ email .setMsg (mail .getString (p ));
64+ }
65+ });
66+ ifset ("replyTo" , p -> email .setReplyTo (address (mail .getStringList (p ))));
67+ ifset ("sendPartial" , p -> email .setSendPartial (mail .getBoolean (p )));
68+ ifset ("smtpPort" , p -> email .setSmtpPort (mail .getInt (p )));
69+ ifset ("socketConnectionTimeout" ,
70+ p -> email .setSocketConnectionTimeout ((int ) mail .getDuration (p , TimeUnit .MILLISECONDS )));
71+ ifset ("socketTimeout" ,
72+ p -> email .setSocketTimeout ((int ) mail .getDuration (p , TimeUnit .MILLISECONDS )));
73+ ifset ("ssl.checkServerIdentity" , p -> email .setSSLCheckServerIdentity (mail .getBoolean (p )));
74+ ifset ("ssl.onConnect" , p -> email .setSSLOnConnect (mail .getBoolean (p )));
75+ ifset ("ssl.smtpPort" , p -> email .setSslSmtpPort (mail .getString (p )));
76+ ifset ("startTLSEnabled" , p -> email .setStartTLSEnabled (mail .getBoolean (p )));
77+ ifset ("startTLSRequired" , p -> email .setStartTLSRequired (mail .getBoolean (p )));
78+ ifset ("subject" , p -> email .setSubject (mail .getString (p )));
79+ ifset ("to" , p -> email .setTo (address (strList (p ))));
80+
81+ return email ;
7082 }
7183
7284 private List <String > strList (final String p ) {
@@ -85,9 +97,9 @@ private List<InternetAddress> address(final List<String> list) throws AddressExc
8597 return addresses ;
8698 }
8799
88- private void ifset (final String key , final EmailSetter setter ) throws Exception {
100+ private void ifset (final String key , final SneakyThrows . Consumer < String > setter ) {
89101 if (mail .hasPath (key )) {
90- setter .apply (key );
102+ setter .accept (key );
91103 }
92104 }
93105}
0 commit comments