1 package com.renatodelgaudio.awsupdate;
2
3 import static org.apache.commons.lang.StringUtils.equalsIgnoreCase;
4
5 import java.util.HashSet;
6 import java.util.Properties;
7 import java.util.Set;
8
9 import org.apache.commons.lang.StringUtils;
10 import org.slf4j.Logger;
11 import org.slf4j.LoggerFactory;
12 import org.springframework.beans.factory.annotation.Value;
13 import org.springframework.mail.SimpleMailMessage;
14 import org.springframework.mail.javamail.JavaMailSenderImpl;
15
16 public class Mailer {
17 private final static Logger log = LoggerFactory.getLogger(Mailer.class);
18
19
20 JavaMailSenderImpl mailSender;
21 @Value("${mailsender.host}")
22 private String mailSenderHost;
23 @Value("${mailsender.protocol}")
24 private String mailSenderProtocol;
25 @Value("${mailsender.port}")
26 private String mailSenderPort;
27 @Value("${mailsender.username}")
28 private String mailSenderUsername;
29 @Value("${mailsender.password}")
30 private String mailSenderPassword;
31 @Value("${mailsender.from}")
32 private String mailSenderFrom;
33 @Value("${mailsender.to}")
34 private String mailSenderTo;
35 @Value("${mailsender.debug.to}")
36 private String mailSenderDebugTo;
37 @Value("${mailsender.enable}")
38 private String mailsenderEnable;
39
40 private String[] to;
41 private String[] debugTo;
42
43
44 private Boolean init = Boolean.FALSE;
45
46
47
48
49 public void sendEmail(String subject,String text) {
50 sendEmailTolist(subject, text, getMergedToList());
51 }
52 public void sendDebugEmail(String subject,String text) {
53 initMailer();
54 if(!isDebugListEmpty()){
55 sendEmailTolist(subject, text, debugTo);
56 }
57
58 }
59 private void sendEmailTolist(String subject,String text,String []toList) {
60 if(!equalsIgnoreCase(mailsenderEnable,"true")) {
61 log.info("Email with subject ["+subject+"] not sent as notification is not enabled.");
62 return;
63 }
64 try {
65 initMailer();
66 SimpleMailMessage smm = new SimpleMailMessage();
67 smm.setSubject(subject);
68 smm.setFrom(mailSenderFrom);
69 smm.setText(text);
70 smm.setTo(toList);
71 mailSender.send(smm);
72 log.info("Email sent with success.\nSubject:"+subject+"\n"+text);
73 }
74 catch (Exception e) {
75 log.error(e.getMessage(),e);
76 }
77
78 }
79
80 private String[] getMergedToList(){
81
82 Set<String> toList = new HashSet<String>();
83 for(String address: to){
84 toList.add(address);
85 }
86 if(!isDebugListEmpty()){
87 for(String address: debugTo){
88 toList.add(address);
89 }
90 }
91
92 return toList.toArray(new String[toList.size()]);
93
94 }
95
96 private boolean isDebugListEmpty(){
97 return debugTo==null || debugTo.length == 0;
98 }
99 private void initMailer(){
100 synchronized (init) {
101 if (!init){
102 mailSender = new JavaMailSenderImpl();
103
104 mailSender.setHost(mailSenderHost);
105 mailSender.setProtocol(mailSenderProtocol);
106 mailSender.setPort(Integer.parseInt(mailSenderPort));
107 mailSender.setUsername(mailSenderUsername);
108 mailSender.setPassword(mailSenderPassword);
109
110
111 to = mailSenderTo.split(",");
112 if(StringUtils.isNotBlank(mailSenderDebugTo))
113 debugTo = mailSenderDebugTo.split(",");
114
115
116 Properties prop = EnvUtil.getConfigAsProperty();
117 Properties javaMail = new Properties();
118 for( Object key : prop.keySet()) {
119 String sk = (String) key;
120 if (StringUtils.startsWith(sk, "mail")){
121 javaMail.put(sk, prop.getProperty(sk));
122 }
123 }
124
125
126 mailSender.setJavaMailProperties(javaMail);
127 init = true;
128 log.info("mailSender configured");
129 }
130
131 }
132 }
133
134
135 }