FileDocCategorySizeDatePackage
Mailer.javaAPI DocExample6958Tue Jan 29 10:56:38 GMT 2002com.darwinsys.util

Mailer

public class Mailer extends Object
Mailer. No relation to Norman. Sends an email message. My old Sender class, recast as a Bean for use in JSP's & elsewhere.
author
Ian F. Darwin
version
$Id: Mailer.java,v 1.11 2002/01/29 15:56:38 ian Exp $

Fields Summary
protected Session
session
The javamail session object.
protected String
from
The sender's email address
protected String
subject
The subject of the message.
protected ArrayList
toList
The recipient ("To:"), as Strings.
protected ArrayList
ccList
The CC list, as Strings.
protected ArrayList
bccList
The BCC list, as Strings.
protected String
body
The text of the message.
protected String
mailHost
The SMTP relay host
protected boolean
verbose
The verbosity setting
Constructors Summary
Methods Summary
public voidaddBcc(java.lang.String bcc)
Add one "bcc" recipient

		bccList.add(bcc);
	
public voidaddCc(java.lang.String cc)
Add one "cc" recipient

		ccList.add(cc);
	
public voidaddTo(java.lang.String to)
Add one "to" recipient

		toList.add(to);
	
public synchronized voiddoSend()
Send the message.


		if (!isComplete())
			throw new IllegalArgumentException(
				"doSend called before message was complete");

		/** Properties object used to pass props into the MAIL API */
		Properties props = new Properties();
		props.put("mail.smtp.host", mailHost);

		// Create the Session object
		if (session == null) {
			session = Session.getDefaultInstance(props, null);
			if (verbose)
				session.setDebug(true);		// Verbose!
		}
		
		// create a message
		final Message mesg = new MimeMessage(session);

		InternetAddress[] addresses;

		// TO Address list
		addresses = new InternetAddress[toList.size()];
		for (int i=0; i<addresses.length; i++)
			addresses[i] = new InternetAddress((String)toList.get(i));
		mesg.setRecipients(Message.RecipientType.TO, addresses);

		// From Address
		mesg.setFrom(new InternetAddress(from));

		// CC Address list
		addresses = new InternetAddress[ccList.size()];
		for (int i=0; i<addresses.length; i++)
			addresses[i] = new InternetAddress((String)ccList.get(i));
		mesg.setRecipients(Message.RecipientType.CC, addresses);

		// BCC Address list
		addresses = new InternetAddress[bccList.size()];
		for (int i=0; i<addresses.length; i++)
			addresses[i] = new InternetAddress((String)bccList.get(i));
		mesg.setRecipients(Message.RecipientType.BCC, addresses);

		// The Subject
		mesg.setSubject(subject);

		// Now the message body.
		mesg.setText(body);

		// Finally, send the message! (use static Transport method)
		// Do this in a Thread as it sometimes is too slow for JServ
		// new Thread() {
			// public void run() {
				// try {

					Transport.send(mesg);

				// } catch (MessagingException e) {
					// throw new IllegalArgumentException(
					// "Transport.send() threw: " + e.toString());
				// }
			// }
		// }.start();
	
public java.util.ArrayListgetBccList()
Get bcclist, as an array of Strings

		return bccList;
	
public java.lang.StringgetBody()
Get message

		return body;
	
public java.util.ArrayListgetCcList()
Get cclist, as an array of Strings

		return ccList;
	
public java.lang.StringgetFrom()
Get from


	   
	   
		return from;
	
public java.lang.StringgetSubject()
Get subject

		return subject;
	
public java.util.ArrayListgetToList()
Get tolist, as an array of Strings

		return toList;
	
public booleanisComplete()
Check if all required fields have been set before sending. Normally called e.g., by a JSP before calling doSend. Is also called by doSend for verification.

		if (from == null    || from.length()==0) {
			System.err.println("doSend: no FROM");
			return false;
		}
		if (subject == null || subject.length()==0) {
			System.err.println("doSend: no SUBJECT");
			return false;
		}
		if (toList.size()==0) {
			System.err.println("doSend: no recipients");
			return false;
		}
		if (body == null || body.length()==0) {
			System.err.println("doSend: no body");
			return false;
		}
		if (mailHost == null || mailHost.length()==0) {
			System.err.println("doSend: no server host");
			return false;
		}
		return true;
	
public booleanisVerbose()
Get verbose

		return verbose;
	
public static voidsend(java.lang.String mailhost, java.lang.String recipient, java.lang.String sender, java.lang.String subject, java.lang.String message)
Convenience method that does it all with one call.

param
mailhost - SMTP server host
param
recipient - domain address of email (user@host.domain)
param
sender - your email address
param
subject - the subject line
param
message - the entire message body as a String with embedded \n's

		Mailer m = new Mailer();
		m.setServer(mailhost);
		m.addTo(recipient);
		m.setFrom(sender);
		m.setSubject(subject);
		m.setBody(message);
		m.doSend();
	
public voidsetBccList(java.util.ArrayList bcc)
Set bcc list to an ArrayList of Strings

		bccList = bcc;
	
public voidsetBccList(java.lang.String s)
Set bcc as a string like "tom, mary, robin@host". Loses any previously-set values.

		bccList = tokenize(s);
	
public voidsetBody(java.lang.String text)
Set message

		body = text;
	
public voidsetCcList(java.util.ArrayList cc)
Set cc list to an ArrayList of Strings

		ccList = cc;
	
public voidsetCcList(java.lang.String s)
Set cc as a string like "tom, mary, robin@host". Loses any previously-set values.

		ccList = tokenize(s);
	
public voidsetFrom(java.lang.String fm)
Set from

		from = fm;
	
public voidsetServer(java.lang.String s)

		mailHost = s;
	
public voidsetSubject(java.lang.String subj)
Set subject

		subject = subj;
	
public voidsetToList(java.util.ArrayList to)
Set to list to an ArrayList of Strings

		toList = to;
	
public voidsetToList(java.lang.String s)
Set to as a string like "tom, mary, robin@host". Loses any previously-set values.

		toList = tokenize(s);
	
public voidsetVerbose(boolean v)
Set verbose

		verbose = v;
	
protected java.util.ArrayListtokenize(java.lang.String s)
Convert a list of addresses to an ArrayList. This will work for simple names like "tom, mary@foo.com, 123.45@c$.com" but will fail on certain complex (but RFC-valid) names like "(Darwin, Ian) ". Or even "Ian Darwin ".

		ArrayList al = new ArrayList();
		StringTokenizer tf = new StringTokenizer(s, ",");
		// For each word found in the line
		while (tf.hasMoreTokens()) {
			// trim blanks, and add to list.
			al.add(tf.nextToken().trim());
		}
		return al;