Java Mail API - PowerPoint PPT Presentation

About This Presentation
Title:

Java Mail API

Description:

Java Mail API Sending and Receiving Emails javax.mail.MimeBodyPart Implements the Part interface (indirectly through a few abstract classes) Contains the content for ... – PowerPoint PPT presentation

Number of Views:57
Avg rating:3.0/5.0
Slides: 39
Provided by: basit
Category:
Tags: api | java | mail | pop3

less

Transcript and Presenter's Notes

Title: Java Mail API


1
Java Mail API
  • Sending and Receiving Emails

2
Mail API
  • Java Mail API is an easy and standard way of
    sending and receiving emails
  • Java Mail API supports following Protocols
  • SMTP
  • POP
  • IMAP
  • MIME

3
SMTP
  • Simple Mail Transfer Protocol
  • Usually used for sending emails from clients
  • Also used for relaying emails from one server to
    another

4
SMTP
5
POP
  • Post office protocol
  • Currently Version 3 in use (Pop3 RFC1939)
  • Used at client side to check the emails that are
    received in the mailbox for a user

6
IMAP
  • Stands for Internet Message Access Protocol
  • Currently IMAP4 (RFC2060) in use
  • More advanced protocol for email access that
    allows multiple folder management on server,
    periodic backups and several other advanced
    features.

7
MIME
  • Multi-purpose Internet Mail Extention
  • Defines the contents that are to be transferred
    in an email

8
What do you need to use Java Mail?
  • You should have following two APIs
  • Java Mail API
  • JavaBeans Activation Framework(JAF)
  • JAF is included in JDK6

9
Mail API
  • As the name says, is used for sending and
    receiving emails.
  • Mail API requires JavaBeans Activation Framework

10
JAF
  • JavaBeans Activation Framework
  • Helps programmers to Determine the type of an
    arbitrary piece of data
  • Encapsulates access to it
  • Discovers operations that can be performed on it

11
Where to get?
  • Both APIs can be downloaded from
    http//java.sun.com
  • Also placed on \\shares\teachers\basit\shared
    docs\aip\APIs

12
How to Install?
  • Un-zip the javamail.zip and jaf.zip into some
    folder
  • Put mail.jar from javamail folder to the
    classpath
  • Put activation.jar from jaf folder to classpath

13
Java Mail classes
  • You must know following classes before you start
  • Session
  • Message
  • Address
  • Transport
  • Store
  • Folder

14
javax.mail.Session
  • Defines a basic mail session
  • Everything in mail api works due to this session

15
javax.mail.Message
  • Represents an email message that is either
    created to be sent to the recipient or is
    received from someone.
  • Message is an Abstract class
  • MimeMessage is the sub-class of message that
    understands most MIME types and is most commonly
    used for email handling

16
javax.mail.Address
  • Represents an email addres
  • Address is an abstract class
  • javax.mail.Internet.InternetAddress is the
    sub-class of Address

17
Message Representation
18
Transport
  • This class speaks the protocol specific language
    to send messages. (Usually SMTP)

19
Store and Folder
  • When receiving email
  • We create a session
  • Connect to a store with our username and password
  • Get specific folders (usually inbox)
  • And start receiving Message objects

20
Sending an Email
  • //Create properties object
  • Properties p System.getProperties()
  • p.put("mail.smtp.host", "202.125.140.71")
  • // Get session
  • Session s Session.getDefaultInstance(p,null)

21
Sending an Email (cont)
  • Message m new MimeMessage(s)
  • InternetAddress to new InternetAddress("basit_at_uc
    p.edu.pk")
  • InternetAddress from new InternetAddress("bill_g
    ates_at_microsoft.com", "Bill Gates")
  • m.setContent("yeah this is the body",
    "text/plain")
  • m.setFrom(from)
  • m.setRecipient(Message.RecipientType.TO, to)
  • m.setSubject("de subject")
  • Transport.send(m)

22
Checking Mails
  • Properties props new Properties()
  • Session session Session.getDefaultInstance(props
    , null)
  • Store store session.getStore("pop3")
  • store.connect(host, username, password)
  • Folder folder store.getFolder("INBOX")
  • folder.open(Folder.READ_ONLY)

23
Checking Mails(cont)
  • Message message folder.getMessages()
  • for (int i0, nmessage.length iltn i)
  • System.out.println(i " "
    messagei.getFrom()0 "\t\t"
    messagei.getSubject())
  • folder.close(false)
  • store.close()

24
Output
  • 0 Syed Basit ltbasit_at_ucp.edu.pkgt test 1
  • 1 basit_at_cnn.com de subject
  • 2 basit_at_microsoft.com de subject
  • 3 basit_at_dell.com de subject
  • 4 basit_at_hell.com de subject
  • 5 Bill Gates ltbill_gates_at_microsoft.comgt de
    subject

25
Lets Try it out!!!
  • Send email using Gmail SMTP server
  • Set Mail content type (text/plain)

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

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

28
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

29
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 "lthtmlgtltbodygtltbgtMY SPAMlt/bgtltbrgtltimg
  • src'http//www.wrfportal.org/images/NOAA_logo.
    jpg'gt
  • lt/bodygtlt/htmlgt"
  • 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()

30
MultiPart Representation
31
javax.Activation.DataSource
  • Interface that allows access to file type and to
    streams that can manipulate the file
  • public String getContentType() returns the name
    of the MIME file type
  • Implemented by javax.Activation.FileDataSource
  • Used by JavaMail to create and retrieve e-mail
    attachments
  • Constructors
  • FileDataSource(File file)
  • FileDataSource(String filename)

32
javax.Activation.DataHandler
  • Wrapper for DataSource objects so that the user
    does not need to manipulate the bytes for each
    file
  • Constructors
  • DataHandler(DataSource ds)
  • DataHandler(Object obj, String mimeType)
  • Public Object getContent() Returns the data as
    the object that represents its content type (ie
    runing this method on a text message returns a
    String)

33
javax.mail.Part Revisited
  • Allows manipulation of DataHandlers
  • public void setDataHandler(DataHandler dh)
  • public DataHandler getDataHandler()
  • Other methods abstract user away from need to
    directly manipulate DataHandler
  • public void setContent(Object object, String
    contentType)
  • public Object getContent()

34
javax.mail.MimeBodyPart
  • Implements the Part interface (indirectly through
    a few abstract classes)
  • Contains the content for a single part of an
    e-mail message
  • Uses several methods to manipulate content
    directly or through DataHandler or streams
  • Key Methods
  • public void setText(String text) for text/plain
    content, makes a String into the message content
  • public void setDataHandler(DataHandler dh) sets
    the content using a DataHandler (which may be
    text or any other permitted content)
  • public void setFileName(String filename) sets the
    filename associated with the content, if the
    content represents a file

35
Javax.mail.Multipart
  • Container that holds multiple parts
  • Each part is indexed, starting with 0
  • A Multipart object may be a part within another
    Multipart object
  • Key Methods
  • public void addBodyPart(BodyPart part)
  • public void addBodyPart(BodyPart part, int index)
  • public int getCount() returns the number of
    BodyPart objects

36
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 MimeBodyPart 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!!!

37
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
for text MimeBodyPart mainBodyPart new
MimeBodyPart() mainBodyPart.setText("Here is my
message")
38
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)
Write a Comment
User Comments (0)
About PowerShow.com