| type=page |
| status=published |
| title=Using the Jakarta Mail API |
| prev=jms.html |
| ~~~~~~ |
| |
| = Using the Jakarta Mail API |
| |
| [[GSDVG00021]][[beaow]] |
| |
| |
| [[using-the-jakarta-mail-api]] |
| == 18 Using the Jakarta Mail API |
| |
| This chapter describes how to use the Jakarta Mail API, which provides a set |
| of abstract classes defining objects that comprise a mail system. |
| |
| The following topics are addressed here: |
| |
| * link:#beaox[Introducing Jakarta Mail] |
| * link:#beaoy[Creating a Jakarta Mail Session] |
| * link:#beaoz[Jakarta Mail Session Properties] |
| * link:#beapa[Looking Up a Jakarta Mail Session] |
| * link:#fwfiy[Sending and Reading Messages Using Jakarta Mail] |
| * link:#gkpfg[Using Application-Scoped Jakarta Mail Resources] |
| |
| |
| [NOTE] |
| ==== |
| Jakarta Mail resources are supported only in the full {productName}, not in the Web Profile. |
| ==== |
| |
| |
| [[beaox]][[GSDVG00200]][[introducing-jakarta-mail]] |
| |
| === Introducing Jakarta Mail |
| |
| The Jakarta Mail 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 Jakarta Mail API includes support for the IMAP4, POP3, |
| and SMTP protocols. |
| |
| The Jakarta Mail 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. |
| * Jakarta Mail uses the JavaBeans Activation Framework (JAF) to encapsulate |
| message data and to handle commands intended to interact with that data. |
| |
| For more information, see |
| "link:administration-guide/mail.html#GSADG00019[Administering the Jakarta Mail Service]" |
| in {productName} Administration Guide |
| and the Jakarta Mail specification at |
| `https://jakarta.ee/specifications/mail`. |
| |
| [[beaoy]][[GSDVG00201]][[creating-a-jakarta-mail-session]] |
| |
| === Creating a Jakarta Mail Session |
| |
| You can create a Jakarta Mail session in the following ways: |
| |
| * In the Administration Console, open the Resources component and select |
| Jakarta Mail Sessions. For details, click the Help button in the |
| Administration Console. |
| * Use the `asadmin create-mail-resource` command. For details, see |
| the link:reference-manual.html#GSRFM[{productName} Reference Manual]. |
| |
| [[beaoz]][[GSDVG00202]][[jakarta-mail-session-properties]] |
| |
| === Jakarta Mail Session Properties |
| |
| You can set properties for a Jakarta Mail `Session` object. Every property |
| name must start with a `mail-` prefix. The {productName} changes the |
| dash (`-`) character to a period (`.`) in the name of the property and |
| saves the property to the `MailConfiguration` and Jakarta Mail `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 |
| Jakarta Mail `Session` object, first define the property as follows: |
| |
| * Name - `mail-from` |
| * Value - `john.doe@sun.com` |
| |
| [[beapa]][[GSDVG00203]][[looking-up-a-jakarta-mail-session]] |
| |
| === Looking Up a Jakarta Mail Session |
| |
| The standard Java Naming and Directory Interface (JNDI) subcontext for |
| Jakarta Mail sessions is `java:comp/env/mail`. |
| |
| Registering Jakarta Mail 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 Jakarta Mail 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 Jakarta Mail 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: |
| |
| [source,java] |
| ---- |
| 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 link:jndi.html#beanr[Using |
| the Java Naming and Directory Interface]. |
| |
| [[fwfiy]][[GSDVG00204]][[sending-and-reading-messages-using-jakarta-mail]] |
| |
| === Sending and Reading Messages Using Jakarta Mail |
| |
| The following topics are addressed here: |
| |
| * link:#beapb[To Send a Message Using Jakarta Mail] |
| * link:#beapc[To Read a Message Using Jakarta Mail] |
| |
| [[beapb]][[GSDVG00079]][[to-send-a-message-using-jakarta-mail]] |
| |
| ==== To Send a Message Using Jakarta Mail |
| |
| 1. Import the packages that you need. |
| + |
| [source,java] |
| ---- |
| import java.util.*; |
| import jakarta.activation.*; |
| import jakarta.mail.*; |
| import jakarta.mail.internet.*; |
| import javax.naming.*; |
| ---- |
| 2. Look up the Jakarta Mail session. |
| + |
| [source,java] |
| ---- |
| InitialContext ic = new InitialContext(); |
| String snName = "java:comp/env/mail/MyMailSession"; |
| Session session = (Session)ic.lookup(snName); |
| ---- |
| For more information, see link:#beapa[Looking Up a Jakarta Mail Session]. |
| 3. Override the Jakarta Mail session properties if necessary. |
| + |
| For example: |
| + |
| [source,java] |
| ---- |
| 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: |
| + |
| [source,java] |
| ---- |
| 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. |
| + |
| [source,java] |
| ---- |
| Transport.send(msg); |
| ---- |
| |
| [[beapc]][[GSDVG00080]][[to-read-a-message-using-jakarta-mail]] |
| |
| ==== To Read a Message Using Jakarta Mail |
| |
| 1. Import the packages that you need. |
| + |
| [source,java] |
| ---- |
| import java.util.*; |
| import jakarta.activation.*; |
| import jakarta.mail.*; |
| import jakarta.mail.internet.*; |
| import javax.naming.*; |
| ---- |
| 2. Look up the Jakarta Mail session. |
| + |
| [source,java] |
| ---- |
| InitialContext ic = new InitialContext(); |
| String snName = "java:comp/env/mail/MyMailSession"; |
| Session session = (jakarta.mail.Session)ic.lookup(snName); |
| ---- |
| For more information, see link:#beapa[Looking Up a Jakarta Mail Session]. |
| 3. Override the Jakarta Mail session properties if necessary. |
| + |
| For example: |
| + |
| [source,java] |
| ---- |
| 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. |
| + |
| [source,java] |
| ---- |
| Store store = session.getStore(); |
| store.connect("MailServer", "MailUser", "secret"); |
| ---- |
| 5. Get the INBOX folder. |
| + |
| [source,java] |
| ---- |
| Folder folder = store.getFolder("INBOX"); |
| ---- |
| 6. It is efficient to read the `Message` objects (which represent |
| messages on the server) into an array. |
| + |
| [source,java] |
| ---- |
| Message[] messages = folder.getMessages(); |
| ---- |
| |
| [[gkpfg]][[GSDVG00205]][[using-application-scoped-jakarta-mail-resources]] |
| |
| === Using Application-Scoped Jakarta Mail Resources |
| |
| You can define an application-scoped Jakarta Mail 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 |
| "link:application-deployment-guide/deploying-applications.html#GSDPG00075[Application-Scoped Resources]" in {productName} Application Deployment Guide. |
| |
| |