InitialContext ic = new InitialContext();
String snName = "java:comp/env/mail/MyMailSession";
Session session = (Session)ic.lookup(snName);
Using the JavaMail API |
Previous | Contents |
This chapter describes how to use the JavaMail API, which provides a set of abstract classes defining objects that comprise a mail system.
The following topics are addressed here:
Note
|
JavaMail resources are supported only in the full OracleGlassFish Server, not in the Web Profile. |
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 "Administering the JavaMail
Service" in GlassFish Server Open Source Edition Administration Guide
and the JavaMail specification at
http://www.oracle.com/technetwork/java/javamail/index.html
.
You can create a JavaMail session in the following ways:
In the Administration Console, open the Resources component and select JavaMail Sessions. For details, click the Help button in the Administration Console.
Use the asadmin create-javamail-resource
command. For details, see
the GlassFish Server Open Source Edition Reference Manual.
You can set properties for a JavaMail Session
object. Every property
name must start with a mail-
prefix. The GlassFish 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
The standard Java Naming and Directory Interface (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 Using the Java Naming and Directory Interface.
The following topics are addressed here:
Import the packages that you need.
import java.util.*; import javax.activation.*; import javax.mail.*; import javax.mail.internet.*; import javax.naming.*;
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");
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);
Send the message.
Transport.send(msg);
Import the packages that you need.
import java.util.*; import javax.activation.*; import javax.mail.*; import javax.mail.internet.*; import javax.naming.*;
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");
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");
Get the INBOX folder.
Folder folder = store.getFolder("INBOX");
It is efficient to read the Message
objects (which represent
messages on the server) into an array.
Message[] messages = folder.getMessages();
You can define an application-scoped JavaMail or other resource for an
enterprise application, web module, EJB module, connector module, or
application client module by supplying a glassfish-resources.xml
deployment descriptor file. For details, see
"Application-Scoped Resources" in GlassFish Server
Open Source Edition Application Deployment Guide.
Previous | Contents |