001 //$HeadURL: svn+ssh://jwilden@svn.wald.intevation.org/deegree/base/branches/2.5_testing/src/org/deegree/framework/mail/MailHelper.java $ 002 /*---------------------------------------------------------------------------- 003 This file is part of deegree, http://deegree.org/ 004 Copyright (C) 2001-2009 by: 005 Department of Geography, University of Bonn 006 and 007 lat/lon GmbH 008 009 This library is free software; you can redistribute it and/or modify it under 010 the terms of the GNU Lesser General Public License as published by the Free 011 Software Foundation; either version 2.1 of the License, or (at your option) 012 any later version. 013 This library is distributed in the hope that it will be useful, but WITHOUT 014 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 015 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 016 details. 017 You should have received a copy of the GNU Lesser General Public License 018 along with this library; if not, write to the Free Software Foundation, Inc., 019 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 020 021 Contact information: 022 023 lat/lon GmbH 024 Aennchenstr. 19, 53177 Bonn 025 Germany 026 http://lat-lon.de/ 027 028 Department of Geography, University of Bonn 029 Prof. Dr. Klaus Greve 030 Postfach 1147, 53001 Bonn 031 Germany 032 http://www.geographie.uni-bonn.de/deegree/ 033 034 e-mail: info@deegree.org 035 ----------------------------------------------------------------------------*/ 036 package org.deegree.framework.mail; 037 038 // J2EE 1.2 039 import java.io.File; 040 import java.util.ArrayList; 041 import java.util.Date; 042 import java.util.List; 043 import java.util.Properties; 044 045 import javax.mail.Message; 046 import javax.mail.Multipart; 047 import javax.mail.PasswordAuthentication; 048 import javax.mail.Session; 049 import javax.mail.Transport; 050 import javax.mail.internet.InternetAddress; 051 import javax.mail.internet.MimeBodyPart; 052 import javax.mail.internet.MimeMessage; 053 import javax.mail.internet.MimeMultipart; 054 055 import org.deegree.framework.log.ILogger; 056 import org.deegree.framework.log.LoggerFactory; 057 import org.deegree.framework.util.CharsetUtils; 058 import org.deegree.framework.util.StringTools; 059 import org.deegree.i18n.Messages; 060 061 /** 062 * A helper class to create and send mail. 063 * 064 * @author <a href="mailto:tfr@users.sourceforge.net">Torsten Friebe </A> 065 * @author last edited by: $Author: mschneider $ 066 * 067 * @version $Revision: 18195 $,$Date: 2009-06-18 17:55:39 +0200 (Do, 18 Jun 2009) $ 068 * 069 * @see javax.mail.Message 070 * @see javax.mail.internet.MimeMessage 071 */ 072 073 public final class MailHelper { 074 075 private static final ILogger LOG = LoggerFactory.getLogger( MailHelper.class ); 076 077 /** 078 * Creates a mail helper to send a message. 079 * 080 */ 081 public MailHelper() { 082 // EMpty And useless ConstructorS not typed with emacs 083 } 084 085 /** 086 * This method creates an email message and sends it using the J2EE mail services 087 * 088 * @param eMess 089 * a email message 090 * @param mailHost 091 * name of the SMTP host 092 * 093 * @throws SendMailException 094 * an exception if the message is undeliverable 095 */ 096 public static void createAndSendMail( MailMessage eMess, String mailHost ) 097 throws SendMailException { 098 Properties p = System.getProperties(); 099 p.put( "mail.smtp.host", mailHost ); 100 new MailHelper().createAndSendMail( eMess, Session.getDefaultInstance( p ) ); 101 } 102 103 /** 104 * This method creates an email message and sends it using the J2EE mail services 105 * 106 * @param eMess 107 * a email message 108 * @param mailHost 109 * name of the SMTP host 110 * @param mailHostUser 111 * user name for mail host 112 * @param mailHostPassword 113 * password of user 114 * 115 * 116 * @throws SendMailException 117 * an exception if the message is undeliverable 118 */ 119 public static void createAndSendMail( MailMessage eMess, String mailHost, String mailHostUser, 120 String mailHostPassword ) 121 throws SendMailException { 122 Properties p = System.getProperties(); 123 p.put( "mail.smtp.host", mailHost ); 124 p.setProperty( "mail.smtp.submitter", mailHostUser ); 125 p.setProperty( "mail.smtp.auth", "true" ); 126 Authenticator authenticator = new Authenticator( mailHostUser, mailHostPassword ); 127 128 new MailHelper().createAndSendMail( eMess, Session.getInstance( p, authenticator ) ); 129 } 130 131 /** 132 * This method creates an email message and sends it using the J2EE mail services 133 * 134 * @param eMess 135 * a email message 136 * @param mailHost 137 * name of the SMTP host 138 * @param attachment 139 * Object to attach to a mail 140 * @param mimeType 141 * mimetype of the attchment 142 * 143 * @throws SendMailException 144 */ 145 public static void createAndSendMail( MailMessage eMess, String mailHost, Object[] attachment, String[] mimeType ) 146 throws SendMailException { 147 Properties p = System.getProperties(); 148 p.put( "mail.smtp.host", mailHost ); 149 new MailHelper().createAndSendMail( eMess, Session.getDefaultInstance( p ), attachment, mimeType ); 150 } 151 152 /** 153 * This method creates an email message and sends it using the J2EE mail services 154 * 155 * @param eMess 156 * a email message 157 * @param mailHost 158 * name of the SMTP host 159 * @param attachment 160 * Object to attach to a mail 161 * @param mimeType 162 * mimetype of the attchment 163 * @param mailHostUser 164 * user name for mail host 165 * @param mailHostPassword 166 * password of user 167 * @throws SendMailException 168 */ 169 public static void createAndSendMail( MailMessage eMess, String mailHost, Object[] attachment, String[] mimeType, 170 String mailHostUser, String mailHostPassword ) 171 throws SendMailException { 172 Properties p = System.getProperties(); 173 p.put( "mail.smtp.host", mailHost ); 174 p.setProperty( "mail.smtp.submitter", mailHostUser ); 175 p.setProperty( "mail.smtp.auth", "true" ); 176 Authenticator authenticator = new Authenticator( mailHostUser, mailHostPassword ); 177 178 new MailHelper().createAndSendMail( eMess, Session.getInstance( p, authenticator ), attachment, mimeType ); 179 } 180 181 /** 182 * This method creates an email message and sends it using the J2EE mail services 183 * 184 * @param eMess 185 * a email message 186 * @param mailHost 187 * name of the SMTP host 188 * @param files 189 * files to attach to a mail 190 * @param mimeType 191 * mimetype of the attchment 192 * @throws SendMailException 193 */ 194 public static void createAndSendMail( MailMessage eMess, String mailHost, File[] files, String[] mimeType ) 195 throws SendMailException { 196 Properties p = System.getProperties(); 197 p.put( "mail.smtp.host", mailHost ); 198 new MailHelper().createAndSendMail( eMess, Session.getDefaultInstance( p ), files, mimeType ); 199 } 200 201 /** 202 * This method creates an email message and sends it using the J2EE mail services 203 * 204 * @param eMess 205 * a email message 206 * @param mailHost 207 * name of the SMTP host 208 * @param files 209 * files to attach to a mail 210 * @param mimeType 211 * mimetype of the attchment 212 * @param mailHostUser 213 * @param mailHostPassword 214 * @throws SendMailException 215 */ 216 public static void createAndSendMail( MailMessage eMess, String mailHost, File[] files, String[] mimeType, 217 String mailHostUser, String mailHostPassword ) 218 throws SendMailException { 219 Properties p = System.getProperties(); 220 p.put( "mail.smtp.host", mailHost ); 221 p.setProperty( "mail.smtp.submitter", mailHostUser ); 222 p.setProperty( "mail.smtp.auth", "true" ); 223 Authenticator authenticator = new Authenticator( mailHostUser, mailHostPassword ); 224 225 new MailHelper().createAndSendMail( eMess, Session.getInstance( p, authenticator ), files, mimeType ); 226 } 227 228 /** 229 * This method creates an email message and sends it using the J2EE mail services 230 * 231 * @param eMess 232 * a email message 233 * @param session 234 * 235 * @throws SendMailException 236 * an exception if the message is undeliverable 237 * 238 * @see javax.mail.Transport 239 * @see <a href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Resources4.html#63060">J2EE Mail Session connection 240 * </a> 241 */ 242 public void createAndSendMail( MailMessage eMess, Session session ) 243 throws SendMailException { 244 createAndSendMail( eMess, session, (Object[]) null, null ); 245 } 246 247 /** 248 * This method creates an email message and sends it using the J2EE mail services 249 * 250 * @param eMess 251 * a email message 252 * @param session 253 * @param mailHostUser 254 * @param mailHostPassword 255 * 256 * @throws SendMailException 257 * an exception if the message is undeliverable 258 * 259 * @see javax.mail.Transport 260 * @see <a href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Resources4.html#63060">J2EE Mail Session connection 261 * </a> 262 */ 263 public void createAndSendMail( MailMessage eMess, Session session, String mailHostUser, String mailHostPassword ) 264 throws SendMailException { 265 createAndSendMail( eMess, session, (Object[]) null, null ); 266 } 267 268 /** 269 * This method creates an email message and sends it using the J2EE mail services 270 * 271 * @param eMess 272 * an email message 273 * @param session 274 * @param attachment 275 * Object to attach to a mail 276 * @param mimeType 277 * mimetype of the attchment 278 * @throws SendMailException 279 * an exception if the message is undeliverable 280 */ 281 public void createAndSendMail( MailMessage eMess, Session session, Object[] attachment, String[] mimeType ) 282 throws SendMailException { 283 if ( eMess == null || !eMess.isValid() ) { 284 throw new SendMailException( "Not a valid e-mail!" ); 285 } 286 try { 287 int k = eMess.getMessageBody().length() > 60 ? 60 : eMess.getMessageBody().length() - 1; 288 LOG.logDebug( StringTools.concat( 500, "Sending message, From: ", eMess.getSender(), "\nTo: ", 289 eMess.getReceiver(), "\nSubject: ", eMess.getSubject(), "\nContents: ", 290 eMess.getMessageBody().substring( 0, k ), "..." ) ); 291 // construct the message 292 MimeMessage msg = new MimeMessage( session ); 293 msg.setFrom( new InternetAddress( eMess.getSender() ) ); 294 msg.setRecipients( Message.RecipientType.TO, InternetAddress.parse( eMess.getReceiver(), false ) ); 295 msg.setSubject( eMess.getSubject(), CharsetUtils.getSystemCharset() ); 296 msg.setHeader( "X-Mailer", "JavaMail" ); 297 msg.setSentDate( new Date() ); 298 299 // create and fill the first message part 300 List<MimeBodyPart> mbps = new ArrayList<MimeBodyPart>(); 301 MimeBodyPart mbp = new MimeBodyPart(); 302 mbp.setContent( eMess.getMessageBody(), eMess.getMimeType() ); 303 mbps.add( mbp ); 304 if ( attachment != null ) { 305 if ( attachment.length != mimeType.length ) { 306 throw new SendMailException( Messages.getMessage( "FRAMEWORK_MAIL_ATTACH" ) ); 307 } 308 for ( int i = 0; i < attachment.length; i++ ) { 309 mbp = new MimeBodyPart(); 310 mbp.setContent( attachment[i], mimeType[i] ); 311 mbp.setFileName( "file" + i ); 312 mbps.add( mbp ); 313 } 314 } 315 // create the Multipart and add its parts to it 316 Multipart mp = new MimeMultipart(); 317 for ( int i = 0; i < mbps.size(); i++ ) { 318 mp.addBodyPart( mbps.get( i ) ); 319 } 320 msg.setContent( mp ); 321 322 // Transport tr = session.getTransport( "smtp" ); 323 // if ( mailHostUser != null ) { 324 // tr.connect( mailHostUser, mailHostPassword ); 325 // } else { 326 // tr.connect(); 327 // } 328 // msg.saveChanges(); // don't forget this 329 // tr.sendMessage( msg, msg.getAllRecipients() ); 330 // tr.close(); 331 332 Transport.send( msg ); 333 LOG.logDebug( "Mail sent successfully! Header=", eMess.getHeader() ); 334 } catch ( Exception e ) { 335 LOG.logError( e.getMessage(), e ); 336 String s = Messages.getMessage( "FRAMEWORK_MAIL_SEND_ERROR", eMess.getHeader() ); 337 throw new SendMailException( s, e ); 338 } 339 } 340 341 /** 342 * This method creates an email message and sends it using the J2EE mail services 343 * 344 * @param eMess 345 * an email message 346 * @param session 347 * @param files 348 * files to attach to a mail 349 * @param mimeType 350 * mimetype of the attchment 351 * @throws SendMailException 352 * an exception if the message is undeliverable 353 */ 354 public void createAndSendMail( MailMessage eMess, Session session, File[] files, String[] mimeType ) 355 throws SendMailException { 356 if ( eMess == null || !eMess.isValid() ) { 357 throw new SendMailException( "Not a valid e-mail!" ); 358 } 359 try { 360 int k = eMess.getMessageBody().length() > 60 ? 60 : eMess.getMessageBody().length() - 1; 361 LOG.logDebug( StringTools.concat( 500, "Sending message, From: ", eMess.getSender(), "\nTo: ", 362 eMess.getReceiver(), "\nSubject: ", eMess.getSubject(), "\nContents: ", 363 eMess.getMessageBody().substring( 0, k ), "..." ) ); 364 // construct the message 365 MimeMessage msg = new MimeMessage( session ); 366 msg.setFrom( new InternetAddress( eMess.getSender() ) ); 367 msg.setRecipients( Message.RecipientType.TO, InternetAddress.parse( eMess.getReceiver(), false ) ); 368 msg.setSubject( eMess.getSubject(), CharsetUtils.getSystemCharset() ); 369 msg.setHeader( "X-Mailer", "JavaMail" ); 370 msg.setSentDate( new Date() ); 371 372 // create and fill the first message part 373 List<MimeBodyPart> mbps = new ArrayList<MimeBodyPart>(); 374 MimeBodyPart mbp = new MimeBodyPart(); 375 mbp.setContent( eMess.getMessageBody(), eMess.getMimeType() ); 376 mbps.add( mbp ); 377 if ( files != null ) { 378 if ( files.length != mimeType.length ) { 379 throw new SendMailException( Messages.getMessage( "FRAMEWORK_MAIL_ATTACH" ) ); 380 } 381 for ( int i = 0; i < files.length; i++ ) { 382 mbp = new MimeBodyPart(); 383 mbp.attachFile( files[i] ); 384 mbp.setHeader( "Content-Type", mimeType[i] ); 385 mbps.add( mbp ); 386 } 387 } 388 // create the Multipart and add its parts to it 389 Multipart mp = new MimeMultipart(); 390 for ( int i = 0; i < mbps.size(); i++ ) { 391 mp.addBodyPart( mbps.get( i ) ); 392 } 393 msg.setContent( mp ); 394 395 // send the mail off 396 // Transport tr = session.getTransport( "smtp" ); 397 // if ( mailHostUser != null ) { 398 // tr.connect( mailHostUser, mailHostPassword ); 399 // } else { 400 // tr.connect(); 401 // } 402 // msg.saveChanges(); // don't forget this 403 // tr.sendMessage( msg, msg.getAllRecipients() ); 404 // tr.close(); 405 Transport.send( msg ); 406 LOG.logDebug( "Mail sent successfully! Header=", eMess.getHeader() ); 407 } catch ( Exception e ) { 408 LOG.logError( e.getMessage(), e ); 409 String s = Messages.getMessage( "FRAMEWORK_MAIL_SEND_ERROR", eMess.getHeader() ); 410 throw new SendMailException( s, e ); 411 } 412 } 413 414 private static class Authenticator extends javax.mail.Authenticator { 415 private PasswordAuthentication authentication; 416 417 public Authenticator( String username, String password ) { 418 // String username = "auth-user"; 419 // String password = "auth-password"; 420 authentication = new PasswordAuthentication( username, password ); 421 } 422 423 @Override 424 protected PasswordAuthentication getPasswordAuthentication() { 425 return authentication; 426 } 427 } 428 429 }