View Javadoc

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       * @param args
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 		// Advanced section
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 }