a940abf028dfef5b3d09fdb4de8f6a96999a421f
[dmaap/messagerouter/msgrtr.git] / src / main / java / com / att / dmf / mr / utils / Emailer.java
1 /*******************************************************************************
2  *  ============LICENSE_START=======================================================
3  *  org.onap.dmaap
4  *  ================================================================================
5  *  Copyright © 2017 AT&T Intellectual Property. All rights reserved.
6  *  ================================================================================
7  *  Licensed under the Apache License, Version 2.0 (the "License");
8  *  you may not use this file except in compliance with the License.
9  *  You may obtain a copy of the License at
10  *        http://www.apache.org/licenses/LICENSE-2.0
11 *  
12  *  Unless required by applicable law or agreed to in writing, software
13  *  distributed under the License is distributed on an "AS IS" BASIS,
14  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  *  See the License for the specific language governing permissions and
16  *  limitations under the License.
17  *  ============LICENSE_END=========================================================
18  *  
19  *  ECOMP is a trademark and service mark of AT&T Intellectual Property.
20  *  
21  *******************************************************************************/
22 package com.att.dmf.mr.utils;
23
24 import java.io.IOException;
25 import java.util.Properties;
26 import java.util.concurrent.ExecutorService;
27 import java.util.concurrent.Executors;
28
29 import javax.mail.BodyPart;
30 import javax.mail.Message;
31 import javax.mail.Multipart;
32 import javax.mail.PasswordAuthentication;
33 import javax.mail.Session;
34 import javax.mail.Transport;
35 import javax.mail.internet.InternetAddress;
36 import javax.mail.internet.MimeBodyPart;
37 import javax.mail.internet.MimeMessage;
38 import javax.mail.internet.MimeMultipart;
39
40
41
42 import com.att.ajsc.filemonitor.AJSCPropertiesMap;
43 import com.att.dmf.mr.constants.CambriaConstants;
44 import com.att.eelf.configuration.EELFLogger;
45 import com.att.eelf.configuration.EELFManager;
46
47 /**
48  * Send an email from a message.
49  * 
50  * @author peter
51  */
52 public class Emailer
53 {
54         public static final String kField_To = "to";
55         public static final String kField_Subject = "subject";
56         public static final String kField_Message = "message";
57
58         public Emailer()
59         {
60                 fExec = Executors.newCachedThreadPool ();
61         
62         }
63
64         public void send ( String to, String subj, String body ) throws IOException
65         {
66                 final String[] addrs = to.split ( "," );
67
68                 if ( to.length () > 0 )
69                 {
70                         final MailTask mt = new MailTask ( addrs, subj, body );
71                         fExec.submit ( mt );
72                 }
73                 else
74                 {
75                         log.warn ( "At least one address is required." );
76                 }
77         }
78
79         public void close ()
80         {
81                 fExec.shutdown ();
82         }
83
84         private final ExecutorService fExec;
85         
86
87         
88
89         private static final EELFLogger log = EELFManager.getInstance().getLogger(Emailer.class);
90         
91         public static final String kSetting_MailAuthUser = "mailLogin";
92         public static final String kSetting_MailAuthPwd = "mailPassword";
93         public static final String kSetting_MailFromEmail = "mailFromEmail";
94         public static final String kSetting_MailFromName = "mailFromName";
95         public static final String kSetting_SmtpServer = "mailSmtpServer";
96         public static final String kSetting_SmtpServerPort = "mailSmtpServerPort";
97         public static final String kSetting_SmtpServerSsl = "mailSmtpServerSsl";
98         public static final String kSetting_SmtpServerUseAuth = "mailSmtpServerUseAuth";
99
100         private class MailTask implements Runnable
101         {
102                 public MailTask ( String[] to, String subject, String msgBody )
103                 {
104                         fToAddrs = to;
105                         fSubject = subject;
106                         fBody = msgBody;
107                 }
108
109                 private String getSetting ( String settingKey, String defval )
110                 {
111                         
112                         String strSet = AJSCPropertiesMap.getProperty(CambriaConstants.msgRtr_prop,settingKey);
113                         if(strSet==null)strSet=defval;
114                         return strSet;
115                 }
116
117                 // we need to get setting values from the evaluator but also the channel config
118                 private void makeSetting ( Properties props, String propKey, String settingKey, String defval )
119                 {
120                         props.put ( propKey, getSetting ( settingKey, defval ) );
121                 }
122
123                 private void makeSetting ( Properties props, String propKey, String settingKey, int defval )
124                 {
125                         makeSetting ( props, propKey, settingKey, "" + defval );
126                 }
127
128                 private void makeSetting ( Properties props, String propKey, String settingKey, boolean defval )
129                 {
130                         makeSetting ( props, propKey, settingKey, "" + defval );
131                 }
132
133                 @Override
134                 public void run ()
135                 {
136                         final StringBuffer tag = new StringBuffer ();
137                         final StringBuffer addrList = new StringBuffer ();
138                         tag.append ( "(" );
139                         for ( String to : fToAddrs )
140                         {
141                                 if ( addrList.length () > 0 )
142                                 {
143                                         addrList.append ( ", " );
144                                 }
145                                 addrList.append ( to );
146                         }
147                         tag.append ( addrList.toString () );
148                         tag.append ( ") \"" );
149                         tag.append ( fSubject );
150                         tag.append ( "\"" );
151                         
152                         log.info ( "sending mail to " + tag );
153
154                         try
155                         {
156                                 final Properties prop = new Properties ();
157                                 makeSetting ( prop, "mail.smtp.port", kSetting_SmtpServerPort, 587 );
158                                 prop.put ( "mail.smtp.socketFactory.fallback", "false" );
159                                 prop.put ( "mail.smtp.quitwait", "false" );
160                                 makeSetting ( prop, "mail.smtp.host", kSetting_SmtpServer, "smtp.it.att.com" );
161                                 makeSetting ( prop, "mail.smtp.auth", kSetting_SmtpServerUseAuth, true );
162                                 makeSetting ( prop, "mail.smtp.starttls.enable", kSetting_SmtpServerSsl, true );
163
164                                 final String un = getSetting ( kSetting_MailAuthUser, "" );
165                                 final String pw = getSetting ( kSetting_MailAuthPwd, "" );
166                                 final Session session = Session.getInstance ( prop,
167                                         new javax.mail.Authenticator()
168                                         {
169                                                 @Override
170                                                 protected PasswordAuthentication getPasswordAuthentication()
171                                                 {
172                                                         return new PasswordAuthentication ( un, pw );
173                                                 }
174                                         }
175                                 );
176                                 
177                                 final Message msg = new MimeMessage ( session );
178
179                                 final InternetAddress from = new InternetAddress (
180                                         getSetting ( kSetting_MailFromEmail, "team@sa2020.it.att.com" ),
181                                         getSetting ( kSetting_MailFromName, "The GFP/SA2020 Team" ) );
182                                 msg.setFrom ( from );
183                                 msg.setReplyTo ( new InternetAddress[] { from } );
184                                 msg.setSubject ( fSubject );
185
186                                 for ( String toAddr : fToAddrs )
187                                 {
188                                         final InternetAddress to = new InternetAddress ( toAddr );
189                                         msg.addRecipient ( Message.RecipientType.TO, to );
190                                 }
191
192                                 final Multipart multipart = new MimeMultipart ( "related" );
193                                 final BodyPart htmlPart = new MimeBodyPart ();
194                                 htmlPart.setContent ( fBody, "text/plain" );
195                                 multipart.addBodyPart ( htmlPart );
196                                 msg.setContent ( multipart );
197
198                                 Transport.send ( msg );
199
200                                 log.info ( "mailing " + tag + " off without error" );
201                         }
202                         catch ( Exception e )
203                         {
204                                 log.warn ( "Exception caught for " + tag, e );
205                         }
206                 }
207
208                 private final String[] fToAddrs;
209                 private final String fSubject;
210                 private final String fBody;
211         }
212 }