| 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 Eclipse GlassFish | |
| Server, 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 GlassFish Server 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/toc.html#GSRFM[GlassFish Server 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 GlassFish Server 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,oac_no_warn] | |
| ---- | |
| 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,oac_no_warn] | |
| ---- | |
| import java.util.*; | |
| import jakarta.activation.*; | |
| import jakarta.mail.*; | |
| import jakarta.mail.internet.*; | |
| import javax.naming.*; | |
| ---- | |
| 2. Look up the Jakarta Mail session. + | |
| [source,oac_no_warn] | |
| ---- | |
| 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,oac_no_warn] | |
| ---- | |
| 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,oac_no_warn] | |
| ---- | |
| 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,oac_no_warn] | |
| ---- | |
| 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,oac_no_warn] | |
| ---- | |
| import java.util.*; | |
| import jakarta.activation.*; | |
| import jakarta.mail.*; | |
| import jakarta.mail.internet.*; | |
| import javax.naming.*; | |
| ---- | |
| 2. Look up the Jakarta Mail session. + | |
| [source,oac_no_warn] | |
| ---- | |
| 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,oac_no_warn] | |
| ---- | |
| 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,oac_no_warn] | |
| ---- | |
| Store store = session.getStore(); | |
| store.connect("MailServer", "MailUser", "secret"); | |
| ---- | |
| 5. Get the INBOX folder. + | |
| [source,oac_no_warn] | |
| ---- | |
| Folder folder = store.getFolder("INBOX"); | |
| ---- | |
| 6. It is efficient to read the `Message` objects (which represent | |
| messages on the server) into an array. + | |
| [source,oac_no_warn] | |
| ---- | |
| 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 GlassFish Server | |
| Open Source Edition Application Deployment Guide. | |