Java Mail
How email works
Sending Client Receiving Client
Mail Client Mail Client
Software Software
SMTP POP/ IMAP
Sending Server Receiving Server
SMTP
Mail Server Mail Server
Software Software
3 protocols
• SMTP: Simple Mail Transfer Protocol
– is used to send a message from the mail client software to
your mail server / or from one mail server to another
• POP: Post Office Protocol
– transfers all messages from the mail server to the mail
client. POP in version 3: POP3
• IMAP: Internet Message Access Protocol
– Is used by web-based mail services such as Hotmail,
Yahoo, and Gmail.
– Allows a web browser to read messages that are stored on
the mail server. IMAP in version 4: IMAP4
Normal Email Process
• Mail client software converts message to SMTP (or
other) format before sending to server
• Common form for usual components of message:
Sender, Recipient(s), Subject, Text, …
• Mail server sends message in MIME (Multipurpose
Internet Message Extension) protocol to receiving
server
• Mail client software on receiving client accesses
using mail client software (possibly different): POP,
IMAP
Java Mail
• Java Mail API is a programming interface that
makes it easy for Java developers to write code that
automatically sends an email.
• Key idea: Java Mail (or other mail software) must
emulate what mail client software does
– Create SMTP or other protocol message
– Insert required mail components
– Connect with sending server and transmit message
• Requires mail classes
– Download from JavaMail Home Page
– Insert .jar files into java libraries.
Steps in Java Mail
• Create a mail session
– Creates email message object
• Compose message
– Set message components: Properties of message object
– Set addresses: Can be list for group of recipients
• Send message
– May need to identify self to server
Creating an Email Session
• Create a Properties object to store information:
– Generic Java class to store attribute/value pairs
– Property props = new Properties();
• Specify the sending server:
[Link]("[Link]", URL of mail server);
• Create a new session object from those properties:
Session s = [Link](props);
• Create new MimeMessage object from session
– MimeMessage message = new MimeMessage(s);
Common properties
• [Link]: specifies the protocol
that’s used for the session
• [Link]: specifies the host computer for
SMTP server
• [Link]: specifies the port that the SMTP
server is using
• [Link]: specifies whether authentication
is required to log in to the SMTP server
• [Link]: this property can be set to
false to prevent an SSLException from occurring
when you attempt to connect to a Gmail SMTP
server
Common properties
• To set the properties of Properties object, you can use
the put method to specify of a property name and value
• The static getDefaultInstance method of the Session
class returns the default Session object for the
application
• The setDebug method of the Session object can be
used to print debugging information about the session to
a log file
• If you change the properties for a Session object, you
must restart Tomcat before the changes take effect
• If the Java application is running on the same computer
as the SMTP server, you can use the localhost keyword
to specify the SMTP host.
Setting Message Components
• Set the subject:
[Link]("subject");
• Set the message text:
[Link]("Thanks for your order!");
// text/plain
• Could also be html or other types
– Will need to specify MIME type
String response =
"<html><head><title>Reciept</title</head>
<body><h3>Thank you for your order!</h3>";
[Link](response, "text/html");
Setting Addresses
• Use setRecipient method
– Specify internet address of recipient
• Must use InternetAddress class
• InternetAddress constructor requires email address,
can also optionally give name
– Specify TO, CC, or BCC
– Can add multiple recipients
[Link]([Link],
new InternetAddress("slade@[Link]"));
[Link]([Link],
new InternetAddress(barney@[Link],
"Barney Rubble"));
Setting Addresses
• Address can also be a list
– Good for mailing lists
– Array of type Address
• Use setRecipients method
Address[] list = new Address[size of mailing list];
for (int i = 0; i < size of mailing list; i++) {
list[i] = get next address for file;
}
[Link]([Link], list);
• Use addRecipient method
[Link]([Link],
new InternetAddress("slade@[Link]"))
• Using addRecipient/addRecipients to add email
addresses to any existing addresses for a message
Sending Messages
• Simple method:
[Link](message);
• More complex method if server requires
authentication:
– Create Transport object from sessions
Transport t = [Link]();
– Connect to server with name and password
[Link]("your name", "your password");
– Send the message
[Link](message,
[Link]());