Mailer.java revision 402794e73aed8611d62eb4b01cd155e2d76fcb87
1/******************************************************************************* 2 * Copyright (c) 2000, 2006 IBM Corporation and others. 3 * All rights reserved. This program and the accompanying materials 4 * are made available under the terms of the Eclipse Public License v1.0 5 * which accompanies this distribution, and is available at 6 * http://www.eclipse.org/legal/epl-v10.html 7 * 8 * Contributors: 9 * IBM Corporation - initial API and implementation 10 *******************************************************************************/ 11package org.eclipse.releng; 12 13/** 14 * A Class that sends build related email messages. host, sender, recipient and 15 * build related information set in monitor.properties 16 */ 17 18import javax.activation.DataHandler; 19import javax.activation.FileDataSource; 20import javax.mail.*; 21import javax.mail.internet.*; 22 23import java.io.File; 24import java.util.StringTokenizer; 25import java.util.Properties; 26 27public class Mailer { 28 29 // flag that determines whether or not to send mail 30 boolean sendMail = true; 31 32 // the Object that holds the key value pairs in monitor.properties 33 private BuildProperties buildProperties; 34 35 //convert the comma separated list of email addressed into an array of Address objects 36 private Address[] getAddresses(String recipientList) { 37 int i = 0; 38 StringTokenizer recipients = new StringTokenizer(recipientList, ","); 39 Address[] addresses = new Address[recipients.countTokens()]; 40 41 while (recipients.hasMoreTokens()) { 42 try { 43 addresses[i++] = new InternetAddress(recipients.nextToken()); 44 } catch (AddressException e) { 45 System.out.println("Unable to create address"); 46 } 47 } 48 return addresses; 49 } 50 51 public Mailer(){ 52 this("monitor.properties"); 53 } 54 public Mailer(String buildPropertiesPath){ 55 buildProperties = new BuildProperties(buildPropertiesPath); 56 if (buildProperties.getHost().equals("")||buildProperties.getSender().equals("")||buildProperties.getToRecipientList().equals("")){ 57 sendMail=false; 58 } 59 } 60 61 62 public static void main(String args[]) { 63 Mailer mailer=new Mailer(args[0]); 64 mailer.sendTextMessage(args[1],args[2]); 65 } 66 67 public void sendMessage(String aSubject, String aMessage) { 68 if (aSubject == null || aMessage == null || sendMail == false){ 69 printEmailFailureNotice(aSubject,aMessage); 70 } 71 72 // Get system properties 73 Properties props = System.getProperties(); 74 75 // Setup mail server 76 props.put("mail.smtp.host", buildProperties.getHost()); 77 78 // Get session 79 Session session = Session.getDefaultInstance(props, null); 80 81 // Define message 82 MimeMessage message = new MimeMessage(session); 83 84 try { 85 86 // Set the from address 87 message.setFrom(new InternetAddress(buildProperties.getSender())); 88 89 // Set the to address 90 message.addRecipients(Message.RecipientType.TO, getAddresses(buildProperties.getToRecipientList())); 91 92 // Set the subject 93 message.setSubject(buildProperties.getBuildSubjectPrefix()+ 94 "Build " 95 + buildProperties.getBuildid() 96 + " (Timestamp: " 97 + buildProperties.getTimestamp() 98 + "):" 99 + aSubject); 100 101 // Set the content 102 message.setText( 103 "Build " 104 + buildProperties.getBuildid() 105 + " (Timestamp: " 106 + buildProperties.getTimestamp() 107 + "): " 108 + aMessage); 109 110 // Send message 111 Transport.send(message); 112 113 } catch (AddressException e) { 114 e.printStackTrace(); 115 } catch (MessagingException e) { 116 e.printStackTrace(); 117 } 118 } 119 120 public void sendTextMessage(String aSubject, String aMessage) { 121 if (aSubject == null || aMessage == null || sendMail == false){ 122 printEmailFailureNotice(aSubject,aMessage); 123 } 124 125 // Get system properties 126 Properties props = System.getProperties(); 127 128 // Setup mail server 129 props.put("mail.smtp.host", buildProperties.getHost()); 130 131 // Get session 132 Session session = Session.getDefaultInstance(props, null); 133 134 // Define message 135 MimeMessage message = new MimeMessage(session); 136 137 try { 138 139 // Set the from address 140 message.setFrom(new InternetAddress(buildProperties.getSender())); 141 142 // Set the to address 143 message.addRecipients(Message.RecipientType.BCC, getAddresses(buildProperties.getTextRecipientList())); 144 145 // Set the subject 146 message.setSubject(buildProperties.getBuildSubjectPrefix()+ 147 "Build " 148 + buildProperties.getBuildid() 149 + ":" 150 + aSubject); 151 152 // Set the content 153 message.setText(aMessage); 154 155 // Send message 156 Transport.send(message); 157 158 } catch (AddressException e) { 159 e.printStackTrace(); 160 } catch (MessagingException e) { 161 e.printStackTrace(); 162 } 163 } 164 165 public void sendMultiPartMessage( 166 // a method for sending mail with attachments 167 String aSubject, String aMessage, String[] attachments) { 168 if (aSubject == null || aMessage == null || sendMail == false){ 169 printEmailFailureNotice(aSubject,aMessage); 170 } 171 172 // Get system properties 173 Properties props = System.getProperties(); 174 175 // Setup mail server 176 props.put("mail.smtp.host", buildProperties.getHost()); 177 178 // Get session 179 Session session = Session.getDefaultInstance(props, null); 180 181 // Define message 182 MimeMessage message = new MimeMessage(session); 183 184 Multipart mp = new MimeMultipart(); 185 186 try { 187 // Set the from address 188 message.setFrom(new InternetAddress(buildProperties.getSender())); 189 190 // Set the to address 191 message.addRecipients(Message.RecipientType.TO, getAddresses(buildProperties.getToRecipientList())); 192 193 // Set the subject 194 message.setSubject(buildProperties.getBuildSubjectPrefix()+ 195 "Build " 196 + buildProperties.getBuildid() 197 + " (Timestamp: " 198 + buildProperties.getTimestamp() 199 + "):" 200 + aSubject); 201 202 // create and fill the first message part 203 MimeBodyPart part = new MimeBodyPart(); 204 part.setText( 205 "Build " 206 + buildProperties.getBuildid() 207 + " (Timestamp: " 208 + buildProperties.getTimestamp() 209 + "): " 210 + aMessage); 211 mp.addBodyPart(part); 212 213 //for each attachment create new message part 214 for (int i = 0; i < attachments.length; i++) { 215 MimeBodyPart attachmentPart = new MimeBodyPart(); 216 // attach the file to the message 217 FileDataSource attachment = new FileDataSource(attachments[i]); 218 attachmentPart.setDataHandler(new DataHandler(attachment)); 219 File attachmentFile=new File(attachments[i]); 220 attachmentPart.setFileName(attachmentFile.getParent()+"-"+attachmentFile.getName()); 221 mp.addBodyPart(attachmentPart); 222 } 223 224 // add the Multipart to the message 225 message.setContent(mp); 226 227 Transport.send(message); 228 229 } catch (AddressException e) { 230 } catch (MessagingException e) { 231 } 232 } 233 234 private void printEmailFailureNotice(String aSubject, String aMessage){ 235 System.out.println("Email failed. Settings:"); 236 System.out.println("\nhost="+buildProperties.getHost()+"\nsender="+buildProperties.getSender()+"\nrecipients="+buildProperties.getToRecipientList()); 237 System.out.println("\nSubject="+aSubject+"\nMessage="+aMessage); 238 return; 239 } 240 241 /** 242 * Returns the buildProperties. 243 * @return BuildProperties 244 */ 245 public BuildProperties getBuildProperties() { 246 return buildProperties; 247 } 248 249 /** 250 * Sets the buildProperties. 251 * @param buildProperties The buildProperties to set 252 */ 253 public void setBuildProperties(BuildProperties buildProperties) { 254 this.buildProperties = buildProperties; 255 } 256 257} 258