Once you have configured a Mail Session and targeted it to the relevant servers, a client can access it simply by performing a JNDI lookup using its JNDI name. The session then can be used to send or retrieve email according to the JavaMail API. Suppose we have created a Mail Session that is bound in the JNDI under the name oreilly.mail. The following code sample shows how to access the configured Mail Session:
import javax.activation.*; import javax.mail.*; import javax.mail.internet.* // ... InitialContext ctx = new InitialContext( ); Session session = (Session) ctx.lookup("oreilly.mail");
If you need to change any of the default values assigned to the Mail Session, you can do so by populating a Properties object with the new property values, and then using that object to create a new Mail Session by calling the getInstance( ) method on the existing Session object:
Properties props = new Properties( ); // Place any number of property overrides into props props.put("mail.from", emailAddress); // Create the new session from the old Session otherSession = session.getInstance(props);
Of course, if you are happy with the default values for the Mail Session as specified in the Administration Console, there is no need to create a new session; just look up the preconfigured session.
Once you have obtained a session with the appropriate property values, you can use it to send and receive email. The following code sample shows how to use a Mail Session to send email:
Message msg = new MimeMessage(mysession); msg.setFrom( ); msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse("email@example.com", false)); msg.setSubject("Subject of Message"); msg.setSentDate(new Date( )); msg.setText("HELLO TEST TEST"); Transport.send(msg);
Here, we have made sure that the Mail Session is configured with appropriate values for the properties: mail.from, mail.transport.protocol and mail.host. MIME functionality can be added easily by using other parts of the standard JavaMail API.
In this next example, we look at how to retrieve mail messages from an existing POP3 account. Here, we first connect to a POP3 server, access the INBOX folder (it just so happens POP3 only supports the INBOX folder), and then list the Subject field of all email in that folder.
Store store = session.getStore( ); store.connect("popd.acme.org","mountjoy","pssst123"); Folder folder = store.getDefaultFolder( ); folder = folder.getFolder("INBOX"); folder.open(Folder.READ_ONLY); Message messages = folder.getMessages( ); for (int i =0; i< messages.length; i++) System.out.println(messages[i].getSubject( ));
There are two things that you should be aware of when using the JavaMail API:
Managing the Web Server
Using JNDI and RMI
Using CMP and EJB QL
Packaging and Deployment
Performance, Monitoring, and Tuning
Logging and Internationalization