Smtp mailer package com.ack.j2ee.javamail; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import com.ack.j2ee.javamail.MailMessageBean; import com.ack.j2ee.javamail.MailMessageUtil; /** * SMTP Mailer class to handle sending SMTP emails from within the application */ public class SmtpMailer { private Session session; /** * creates an SmtpMailer object * @param hostName the SMTP mail server * @param debug set debug mode with SmtpMailer * @throws com.ack.j2ee.javamail.SmtpMailerException reports problems configure SmtpMailer */ public SmtpMailer( String hostName, boolean debug ) throws SmtpMailerException { if( hostName == null ) { throw new SmtpMailerException( "supplied hostName was null" ); } // create some properties and get the default Session Properties props = new Properties(); props.put( "mail.smtp.host", hostName ); props.put( "mail.debug", String.valueOf( debug ) ); session = Session.getDefaultInstance( props, null ); session.setDebug( true ); } /** * creates an SmtpMailer object that is not debug mode * @param hostName the SMTP mail server * @throws com.ack.j2ee.javamail.SmtpMailerException reports problems configure SmtpMailer */ public SmtpMailer( String hostName ) throws SmtpMailerException { this( hostName, false ); } public SmtpMailer( Session mailSession ) { if( ( session = mailSession ) == null ) { throw new IllegalArgumentException( "supplied mail session was null" ); } } /** * send a email message that is configured using information within the * MailMessageBean * @param MailMessageBean contains all the information need to send an * email message * @throws SmtpMailException reports problem sending the email * @see com.ack.j2ee.javamail.MailMessageBean */ public void sendMail( MailMessageBean mb ) throws SmtpMailerException { if( mb == null ) { throw new SmtpMailerException( "supplied mail message bean was null" ); } try { Message msg = createMessageFromBean( mb ); Transport.send( msg ); } catch( MessagingException mex ) { MailMessageUtil.reportOnException( mex, System.out ); } } /* private responsibilities */ /** * create a JavaMail message from a MailMessageBean */ private Message createMessageFromBean( MailMessageBean mb ) throws MessagingException, SmtpMailerException { Message msg = new MimeMessage( session ); if( mb.getFromAddress() == null ) { throw new SmtpMailerException( "mandatory from address not supplied" ); } msg.setFrom( new InternetAddress( mb.getFromAddress() ) ); List recipients = mb.getToAddresses(); if( recipients == null || recipients.isEmpty() ) { throw new SmtpMailerException( "mandatory to addresses not supplied" ); } msg.setRecipients( Message.RecipientType.TO, createAddresses( recipients ) ); if( mb.getSubject() == null ) { throw new SmtpMailerException( "mandatory subject line was not supplied" ); } msg.setSubject( mb.getSubject() ); msg.setSentDate( new Date( System.currentTimeMillis() ) ); if( mb.getContents() == null ) { throw new SmtpMailerException( "no email content was not supplied" ); } msg.setText( mb.getContents() ); if( mb.getIsHTML() == true ) { msg.addHeader( "Content-Type", "text/html" ); } return msg; } private InternetAddress[] createAddresses( List l ) throws AddressException { InternetAddress[] addresses = new InternetAddress[l.size()]; int i = 0; for( Iterator it = l.iterator(); it.hasNext(); i++ ) { String emailAddress = (String) it.next(); if( emailAddress != null ) { addresses[i] = new InternetAddress( emailAddress ); } } return addresses; } }