Java Training Introduction to Java Mail Written by Jeff Smith.

26
Java Training Introduction to Java Mail Written by Jeff Smith
  • date post

    22-Dec-2015
  • Category

    Documents

  • view

    231
  • download

    1

Transcript of Java Training Introduction to Java Mail Written by Jeff Smith.

Page 1: Java Training Introduction to Java Mail Written by Jeff Smith.

Java TrainingIntroduction to Java Mail

Written by Jeff Smith

Page 2: Java Training Introduction to Java Mail Written by Jeff Smith.

What is JavaMail? -1 JavaMail is an API for sending and receiving email using

Java. The current version is 1.3.1 and can be downloaded from Sun's website at:

http://java.sun.com/products/javamail/

Possible uses: Send email from web pages using servlets Create a GUI email client Send email from Java stored procedures Send email from any type of Java application Spam your friends and enemies! (read email addresses

from a database, write a for () loop, and away the emails go!)

Page 3: Java Training Introduction to Java Mail Written by Jeff Smith.

What is JavaMail? -2

To send JavaMail, you'll need to add at least two JAR files from Sun to your classpath (placing them in a lib directory may be a good idea) activation.jar mail.jar

(Note: You can download these files from the Java Zone)

For more complex emailing tasks (like receiving or managing pop3 or imap mail servers), you'll need to download additional files like pop3.jar and imap.jar.

You will also need access to a mail server and possibly a username/password for that mail server

Page 4: Java Training Introduction to Java Mail Written by Jeff Smith.

How Does Email Work?

In general, each internet domain has an email server. When you send out an email

Your email client program sends the message to your email server

Your email server contacts the addressee's email server using the SMTP (simple mail transfer protocol)

Your email server verifies that the addressee's user name is valid

Your email server then transfers the email to the addressee's email server

When the addressee logs into his email server (using his email client program), he gets his email

Page 5: Java Training Introduction to Java Mail Written by Jeff Smith.

Mail Servers (sendmail)-1

sendmail is the most commonly used mail server in the world, as it generally comes free with Unix and Linux installations very powerful and flexible. Supports POP3 and IMAP well documented (lots of books on setting up sendmail) long track record (first version appeared in early '80s) tedious to set up (lots of cryptic configuration files) free www.sendmail.org

Page 6: Java Training Introduction to Java Mail Written by Jeff Smith.

Mail Servers (qmail)-2

qmail is probably the most popular alternative to sendmail in the UNIX world perhaps more secure than sendmail (at least older

versions of sendmail) Easier to set up and administer than sendmail pretty good documentation (several books written on

qmail in the past few years) free http://www.qmail.org/top.html

Page 7: Java Training Introduction to Java Mail Written by Jeff Smith.

Mail Servers (MS Exchange)-2

MS Exchange is widely used in the Windows world, especially in corporate environments that use MS Office (and hence MS Outlook) Expensive Integrated into MS Active Directory GUI administration tools are easier to learn for Windows

people

MS Outlook is a powerful and slick email program that will work with Exchange, sendmail, or qmail. It does, however, have a history of security vulnerabilities and some organizations refuse to use it because of that.

Page 8: Java Training Introduction to Java Mail Written by Jeff Smith.

POP3, IMAP, MAPI -1

Currently, the most popular protocols are POP3 (Post Office Protocol, version 3) IMAP (Internet Message Access Protocol) MAPI (Messaging Application Programming Interface--

Microsoft Windows email interface)

Page 9: Java Training Introduction to Java Mail Written by Jeff Smith.

POP3

POP3 is the oldest and most widely used. It was designed to support offline mail processing. Mail is delivered to a server and a user's computer runs

a mail client program to download any new mail Once messages are delivered, they are generally

deleted from the mail server This minimizes disk space requirements for mail server,

but ties the mail to a particular machine. If user goes to another computer, he can't access his mail

POP3 has limited support for reading mail online (and leaving the mail on the mail server)

Simpler protocol than IMAP makes it easier to implement. More POP3 mail clients available

Page 10: Java Training Introduction to Java Mail Written by Jeff Smith.

IMAP

IMAP Developed at University of Washington Primarily used to access mail and leave it on the mail

server. This allows users to access their mail from any computer

Requires more disk space to store email messages Can work in "offline" mode like POP3 Easy to manage multiple mailboxes Supports tagging emails with flags like "read", "deleted",

"answered", etc.

Page 11: Java Training Introduction to Java Mail Written by Jeff Smith.

MAPI

MAPI Set of C functions (API) developed by Microsoft and

supported in MS Exchange/Outlook Also supported by Eudora Mail For more info, type the following search string in Google:

"MAPI site:msdn.microsoft.com"

Page 12: Java Training Introduction to Java Mail Written by Jeff Smith.

Apache James Mail Server

Apache has a free mail server called James Supports POP3, SMTP, and NNTP Download the binary file

.ZIP version (for Windows) .TAR version (for Linux)

Uncompress it and then run “run.bat” (Windows) or “run.sh” (Linux) to start the mail server

Download from here:

http://james.apache.org/download.cgi

Page 13: Java Training Introduction to Java Mail Written by Jeff Smith.

NOAA Mail Server

You can use ESRL/NOAA’s email server

email.boulder.noaa.gov mailProperties.setProperty("mail.smtp.host","email.boulder.noaa.gov");

This will work IF you send emails to @noaa.gov email addresses (like [email protected])

When I tried to send an email to [email protected] I got this error message

Invalid Address

Relaying not allowed: [email protected]

Page 14: Java Training Introduction to Java Mail Written by Jeff Smith.

Using JavaMail -1

Once you have a mail server you can use (either James or another mail server), you can send emails through it by using JavaMail

In general, to send a plain text email using JavaMail, you do the following: Get a mail session instance Create a MimeMessage object (passing in the mail

session instance into the constructor) Set the MimeMessage object's properties (like the

toAddress, fromAddress, message, etc.) Send the message

Page 15: Java Training Introduction to Java Mail Written by Jeff Smith.

Getting a Mail Session Get a mail session for the James mail server. If James is

running on your own computer, your mail.smtp.host is localhost.

If your mail server is a remote computer, it might be something like “mailgate.fsl.noaa.gov”

Get a mail session for the James mail server

private Session getMailSession() throws Exception

{

Properties mailProperties = new Properties();

mailProperties.setProperty("mail.transport.protocol",

"smtp");

mailProperties.setProperty("mail.smtp.host",

"localhost"); return Session.getInstance(mailProperties, null);

}

Page 16: Java Training Introduction to Java Mail Written by Jeff Smith.

Plain Text Email Example

Next, send your email using the mail session

MimeMessage msg = new MimeMessage(getMailSession());

msg.setFrom(new InternetAddress("[email protected]"));

msg.addRecipient(Message.RecipientType.TO,

new InternetAddress("[email protected]"));

msg.setSubject("RE: Oracle vs SQL Server");

msg.setText("SQL Server is better than Oracle");

Transport.send(msg);

Page 17: Java Training Introduction to Java Mail Written by Jeff Smith.

Exceptions and imports

Your code which sends an email will need to catch the following checked exceptions: Exception MessagingException AddressException

You should import the following packages:

import javax.mail.*;

import javax.mail.internet.*;

Page 18: Java Training Introduction to Java Mail Written by Jeff Smith.

HTML Email

You can also send HTML email with JavaMail. HTML email can be used to

Use different size fonts imbed images into your email

Use different colored text, bold, italic, etc.

Page 19: Java Training Introduction to Java Mail Written by Jeff Smith.

HTML Email

With HTML email, you set the mime message content type to "text/html" call the setContent() method to set your html content

It helps to know a little HTML!

Page 20: Java Training Introduction to Java Mail Written by Jeff Smith.

Mail Security

Virtually all mail servers require a username and password to receive email

Some mail servers require a username and password to send an email (by default, James does not). This prevents spammers from hijacking the mail server

to send unauthorized email JavaMail supports this username/password authorization

and authentication To implement this, you get a transport object from the

mail session and call the connect() method with the mail host, username, and password

See next slide for code example

Page 21: Java Training Introduction to Java Mail Written by Jeff Smith.

HTML Email Example Example of sending html message with an imbedded image

using username/password authorization

MimeMessage msg = new MimeMessage(mailSession);

msg.setFrom(new InternetAddress("[email protected]"));

msg.addRecipient(Message.RecipientType.TO, new

InternetAddress(“[email protected]"));

msg.setSubject(subject);

String html = "<html><body><b>MY SPAM</b><br><img

src='http://www.wrfportal.org/images/NOAA_logo.jpg'>

</body></html>";

msg.setContent(html, "text/html");

Transport transport = mailSession.getTransport("smtp");

transport.connect("localhost","user", "passwd");

msg.saveChanges();

transport.sendMessage(msg, msg.getAllRecipients());

transport.close();

Page 22: Java Training Introduction to Java Mail Written by Jeff Smith.

Email attachments -1

To append an email attachment, you need to send a "multipart" message Create your MimeMessage object as usual, setting the

from address, to address, subject, etc... Create a MimeBodyPart object for your main message

and set its text (or content) to be your message Create a MimeMultiPart object for your attachment and

call its setContent() method to attach your file Create a Multipart object and add both body parts to it. Call your MimeMessage's setContent() method, passing

in your Multipart object Call Transport.send() to send the message

Whew!!!

Page 23: Java Training Introduction to Java Mail Written by Jeff Smith.

Email attachment Example-1

MimeMessage msg = new MimeMessage(getMailSession());

msg.setFrom(new InternetAddress("[email protected]"));

msg.addRecipient(Message.RecipientType.TO,

new InternetAddress("[email protected]"));

msg.setSubject("RE: Oracle vs SQL Server");

//Create the main message (body) part

MimeBodyPart mainBodyPart = new MimeBodyPart();

mainBodyPart.setText("Here is my message");

Page 24: Java Training Introduction to Java Mail Written by Jeff Smith.

Email attachment Example-2//Create attachment body part

MimeBodyPart attachBodyPart = new MimeBodyPart();

DataSource source = new FileDataSource("1.jpg");

attachBodyPart.setDataHandler(new DataHandler(source));

attachBodyPart.setFileName("1.jpg");

//Now create the multipart and add the parts

Multipart multipart = new MimeMultipart();

multipart.addBodyPart(mainBodyPart);

multipart.addBodyPart(attachBodyPart);

//add the multipart to the original Mime message

msg.setContent(multipart);

Transport.send(msg);

Page 25: Java Training Introduction to Java Mail Written by Jeff Smith.

Exercise -1

Write a program in package gov.noaa.email that reads a list of email recipients from a disk file and then sends them each an email message.

Use your NOAA webmail account to test this (or you can use our Yahoo email account)

You'll need to: Create a file and populate it with a list of email addresses (use your

own email address or someone else in the class) Send a single email to all the recipients you read from the db table. If you are feeling ambitious, you can send an HTML email message. Use an email client (NOAA webmail?) to verify message delivery

Extra credit: send an email attachment and write an Ant script for your project

Page 26: Java Training Introduction to Java Mail Written by Jeff Smith.

JavaMail Summary JavaMail is powerful with good support for things like HTML

and attachments But adding an attachment isn't as simple as it should be. A

nice framework (or helper class) would be useful to simplify JavaMail code

JavaMail also supports receiving email administering mail servers

For an article on receiving email via JavaMail, see:

http://www.javaworld.com/javaworld/jw-10-2001/jw-1026-javamail-p2.html