1 /*******************************************************************************
2 * ============LICENSE_START=======================================================
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
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=========================================================
19 * ECOMP is a trademark and service mark of AT&T Intellectual Property.
21 *******************************************************************************/
22 package com.att.dmf.mr.utils;
24 import java.io.IOException;
25 import java.util.Properties;
26 import java.util.concurrent.ExecutorService;
27 import java.util.concurrent.Executors;
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;
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;
48 * Send an email from a message.
54 public static final String kField_To = "to";
55 public static final String kField_Subject = "subject";
56 public static final String kField_Message = "message";
60 fExec = Executors.newCachedThreadPool ();
64 public void send ( String to, String subj, String body ) throws IOException
66 final String[] addrs = to.split ( "," );
68 if ( to.length () > 0 )
70 final MailTask mt = new MailTask ( addrs, subj, body );
75 log.warn ( "At least one address is required." );
84 private final ExecutorService fExec;
89 private static final EELFLogger log = EELFManager.getInstance().getLogger(Emailer.class);
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";
100 private class MailTask implements Runnable
102 public MailTask ( String[] to, String subject, String msgBody )
109 private String getSetting ( String settingKey, String defval )
112 String strSet = AJSCPropertiesMap.getProperty(CambriaConstants.msgRtr_prop,settingKey);
113 if(strSet==null)strSet=defval;
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 )
120 props.put ( propKey, getSetting ( settingKey, defval ) );
123 private void makeSetting ( Properties props, String propKey, String settingKey, int defval )
125 makeSetting ( props, propKey, settingKey, "" + defval );
128 private void makeSetting ( Properties props, String propKey, String settingKey, boolean defval )
130 makeSetting ( props, propKey, settingKey, "" + defval );
136 final StringBuffer tag = new StringBuffer ();
137 final StringBuffer addrList = new StringBuffer ();
139 for ( String to : fToAddrs )
141 if ( addrList.length () > 0 )
143 addrList.append ( ", " );
145 addrList.append ( to );
147 tag.append ( addrList.toString () );
148 tag.append ( ") \"" );
149 tag.append ( fSubject );
152 log.info ( "sending mail to " + tag );
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 );
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()
170 protected PasswordAuthentication getPasswordAuthentication()
172 return new PasswordAuthentication ( un, pw );
177 final Message msg = new MimeMessage ( session );
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 );
186 for ( String toAddr : fToAddrs )
188 final InternetAddress to = new InternetAddress ( toAddr );
189 msg.addRecipient ( Message.RecipientType.TO, to );
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 );
198 Transport.send ( msg );
200 log.info ( "mailing " + tag + " off without error" );
202 catch ( Exception e )
204 log.warn ( "Exception caught for " + tag, e );
208 private final String[] fToAddrs;
209 private final String fSubject;
210 private final String fBody;