Java Training Introduction to Java Mail - PowerPoint PPT Presentation

1 / 26
About This Presentation
Title:

Java Training Introduction to Java Mail

Description:

When I tried to send an email to jeffssmith1_at_yahoo.com I got this error message. Invalid Address ... (or you can use our Yahoo email account) You'll need to: ... – PowerPoint PPT presentation

Number of Views:993
Avg rating:3.0/5.0
Slides: 27
Provided by: cexpem
Category:

less

Transcript and Presenter's Notes

Title: Java Training Introduction to Java Mail


1
Java TrainingIntroduction to Java Mail
  • Written by Jeff Smith

2
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!)

3
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

4
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

5
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

6
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

7
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.

8
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)

9
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

10
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.

11
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 sitemsdn.microsoft.com"

12
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

13
NOAA Mail Server
  • You can use ESRL/NOAAs email server
  • email.boulder.noaa.gov
  • mailProperties.setProperty("mail.smtp.host","email
    .boulder.noaa.gov")
  • This will work IF you send emails to _at_noaa.gov
    email addresses (like jeff.s.smith_at_noaa.gov)
  • When I tried to send an email to
    jeffssmith1_at_yahoo.com I got this error message
  • Invalid Address
  • Relaying not allowed jeffssmith1_at_yahoo.com

14
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

15
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.proto
    col",
  • "smtp")
  • mailProperties.setProperty("mail.smtp.host",
  • "localhost")
  • return Session.getInstance(mailProperties,
    null)

16
Plain Text Email Example
  • Next, send your email using the mail session
  • MimeMessage msg new MimeMessage(getMailSession()
    )
  • msg.setFrom(new InternetAddress("bill.gates_at_msn.co
    m"))
  • msg.addRecipient(Message.RecipientType.TO,
  • new InternetAddress("larry.ellison_at_oracle.co
    m"))
  • msg.setSubject("RE Oracle vs SQL Server")
  • msg.setText("SQL Server is better than Oracle")
  • Transport.send(msg)

17
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.

18
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.

19
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!

20
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

21
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("bill_at_msn.com"))
  • msg.addRecipient(Message.RecipientType.TO, new
  • InternetAddress(tom_at_msn.com"))
  • msg.setSubject(subject)
  • String html "MY SPAM
  • src'http//www.wrfportal.org/images/NOAA_logo.
    jpg'
  • "
  • msg.setContent(html, "text/html")
  • Transport transport mailSession.getTransport("sm
    tp")
  • transport.connect("localhost","user", "passwd")
  • msg.saveChanges()
  • transport.sendMessage(msg, msg.getAllRecipients())
  • transport.close()

22
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!!!

23
Email attachment Example-1
MimeMessage msg new MimeMessage(getMailSession()
) msg.setFrom(new InternetAddress("bill.gates_at_msn
.com")) msg.addRecipient(Message.RecipientType.TO
, new InternetAddress("larry.ellison_at_oracle
.com")) msg.setSubject("RE Oracle vs SQL
Server") //Create the main message (body)
part MimeBodyPart mainBodyPart new
MimeBodyPart() mainBodyPart.setText("Here is my
message")
24
Email attachment Example-2
//Create attachment body part MimeBodyPart
attachBodyPart new MimeBodyPart() DataSource
source new FileDataSource("1.jpg") attachBodyPa
rt.setDataHandler(new DataHandler(source)) attach
BodyPart.setFileName("1.jpg") //Now create the
multipart and add the parts Multipart multipart
new MimeMultipart() multipart.addBodyPart(mainBod
yPart) multipart.addBodyPart(attachBodyPart) /
/add the multipart to the original Mime
message msg.setContent(multipart) Transport.send
(msg)
25
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

26
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-1
    026-javamail-p2.html
Write a Comment
User Comments (0)
About PowerShow.com