Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Developer's Guide

- Previous: Chapter 14 Using the Java Message Service
- Next: Chapter 16 Using the Java Management Extensions (JMX) API

# Chapter 15 Using the JavaMail API

This chapter describes how to use the JavaMailTM API, which provides a set of abstract classes defining objects that comprise a mail system.

This chapter contains the following sections:

- Introducing JavaMail

- Creating a JavaMail Session

- JavaMail Session Properties

- Looking Up a JavaMail Session

- Sending and Reading Messages Using JavaMail

# Introducing JavaMail

The JavaMail API defines classes such as `Message`, `Store`, and `Transport`. The API can be extended and can be subclassed to provide new protocols and to add functionality when necessary. In addition, the API provides concrete subclasses of the abstract classes. These subclasses, including `MimeMessage` and `MimeBodyPart`, implement widely used Internet mail protocols and conform to the RFC822 and RFC2045 specifications. The JavaMail API includes support for the IMAP4, POP3, and SMTP protocols.

The JavaMail architectural components are as follows:

- The abstract layer declares classes, interfaces, and abstract methods intended to support mail handling functions that all mail systems support.

- The internet implementation layer implements part of the abstract layer using the RFC822 and MIME internet standards.

- JavaMail uses the JavaBeans Activation Framework (JAF) to encapsulate message data and to handle commands intended to interact with that data.

For more information, see the Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Administration Guide and the JavaMail specification at `http://java.sun.com/products/javamail/`.

# Creating a JavaMail Session

You can create a JavaMail session in the following ways:

- In the Administration Console, open the Resources component and select JavaMail Sessions. For details, see the Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Administration Guide.

- Use the `asadmin create-javamail-resource` command. For details, see the Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Reference Manual.

# JavaMail Session Properties

You can set properties for a JavaMail `Session` object. Every property name must start with a `mail-` prefix. The Application Server changes the dash (`-`) character to a period (`.`) in the name of the property and saves the property to the `MailConfiguration` and JavaMail `Session` objects. If the name of the property doesn’t start with `mail-`, the property is ignored.

For example, if you want to define the property `mail.from` in a JavaMail `Session` object, first define the property as follows:

- Name - `mail-from`

- Value - `john.doe@sun.com`

After you get the JavaMail `Session` object, you can get the `mail.from` property to retrieve the value as follows:

    String password = session.getProperty("mail.from");

# Looking Up a JavaMail Session

The standard Java Naming and Directory InterfaceTM (JNDI) subcontext for JavaMail sessions is `java:comp/env/mail`.

Registering JavaMail sessions in the `mail` naming subcontext of a JNDI namespace, or in one of its child subcontexts, is standard. The JNDI namespace is hierarchical, like a file system’s directory structure, so it is easy to find and nest references. A JavaMail session is bound to a logical JNDI name. The name identifies a subcontext, `mail`, of the root context, and a logical name. To change the JavaMail session, you can change its entry in the JNDI namespace without having to modify the application.

The resource lookup in the application code looks like this:

    InitialContext ic = new InitialContext();
    String snName = "java:comp/env/mail/MyMailSession";
    Session session = (Session)ic.lookup(snName);

For more information about the JNDI API, see Chapter 13, Using the Java Naming and Directory Interface.

# Sending and Reading Messages Using JavaMail

## To send a message using JavaMail

1. Import the packages that you need.

       import java.util.*;
       import javax.activation.*;
       import javax.mail.*;
       import javax.mail.internet.*;
       import javax.naming.*;

2. Look up the JavaMail session.

       InitialContext ic = new InitialContext();
       String snName = "java:comp/env/mail/MyMailSession";
       Session session = (Session)ic.lookup(snName);

   For more information, see Looking Up a JavaMail Session.

3. Override the JavaMail session properties if necessary.

   For example:

       Properties props = session.getProperties();
       props.put("mail.from", "user2@mailserver.com");

4. Create a `MimeMessage`.

   The `msgRecipient`, `msgSubject`, and `msgTxt` variables in the following example contain input from the user:

       Message msg = new MimeMessage(session);
       msg.setSubject(msgSubject);
       msg.setSentDate(new Date());
       msg.setFrom();
       msg.setRecipients(Message.RecipientType.TO,
          InternetAddress.parse(msgRecipient, false));
       msg.setText(msgTxt);

5. Send the message.

       Transport.send(msg);

## To read a message using JavaMail

1. Import the packages that you need.

       import java.util.*;
       import javax.activation.*;
       import javax.mail.*;
       import javax.mail.internet.*;
       import javax.naming.*;

2. Look up the JavaMail session.

       InitialContext ic = new InitialContext();
       String snName = "java:comp/env/mail/MyMailSession";
       Session session = (javax.mail.Session)ic.lookup(snName);

   For more information, see Looking Up a JavaMail Session.

3. Override the JavaMail session properties if necessary.

   For example:

       Properties props = session.getProperties();
       props.put("mail.from", "user2@mailserver.com");

4. Get a `Store` object from the `Session`, then connect to the mail server using the Store object’s `connect()` method.

   You must supply a mail server name, a mail user name, and a password.

       Store store = session.getStore();
       store.connect("MailServer", "MailUser", "secret");

5. Get the INBOX folder.

       Folder folder = store.getFolder("INBOX");

6. It is efficient to read the `Message` objects (which represent messages on the server) into an array.

       Message[] messages = folder.getMessages();

- Previous: Chapter 14 Using the Java Message Service
- Next: Chapter 16 Using the Java Management Extensions (JMX) API

- © 2010, Oracle Corporation and/or its affiliates