topic : javamail api (1) sending and receiving emails kaster nurmukan

41
Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

Upload: derrick-glasco

Post on 15-Jan-2016

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

Topic : JavaMail API (1)Sending and Receiving Emails

Kaster Nurmukan

Page 2: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

• Overview of JavaMail API• SMTP • POP• MIME• javaMail API• HTML Email• Email With attachment

Page 3: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

• Java Mail API is an easy and standard way of sending and receiving emails

• Java Mail API supports following Protocols:– SMTP– POP– IMAP– MIME

Page 4: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

• Simple Mail Transfer Protocol– Usually used for sending emails from clients

– Also used for relaying emails from one server to another

Page 5: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan
Page 6: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

• 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

Page 7: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

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

Page 8: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

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

Page 9: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

• You should have following two APIs– Java Mail API

– JavaBeans Activation Framework(JAF)

– JAF is included in JDK6

Page 10: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

• As the name says, is used for sending and receiving emails.

• Mail API requires JavaBeans Activation Framework

Page 11: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

• 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

Page 12: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

• Both APIs can be downloaded from http://java.sun.com• Also placed on \\shares\teachers\basit\shared docs\aip\

APIs

Page 13: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

• 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

Page 14: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

• You must know following classes before you start– Session

– Message

– Address

– Transport

– Store

– Folder

Page 15: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

• Defines a basic mail session• Everything in mail api works due to this session

Page 16: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

• 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

Page 17: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

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

Address

Page 18: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

MimeMessage

Headers

Session

Address[] To Address[] From

String subject Date sentDate

Message Content: String text

Properties

Page 19: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

• This class speaks the protocol specific language to send messages. (Usually SMTP)

Page 20: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

• 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

Page 21: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

//Create properties objectProperties p = System.getProperties();p.put("mail.smtp.host", "202.125.140.71");

// Get sessionSession s = Session.getDefaultInstance(p,null);

Page 22: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

Message m = new MimeMessage(s);

InternetAddress to = new InternetAddress("[email protected]");InternetAddress from = new InternetAddress("[email protected]",

"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);

Page 23: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

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

Page 24: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

Message message[] = folder.getMessages();

for (int i=0, n=message.length; i<n; i++) { System.out.println(i + ": " +

message[i].getFrom()[0] + "\t\t" + message[i].getSubject());}

folder.close(false);store.close();

Page 25: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

0: Syed Basit <[email protected]> test 11: [email protected] de subject 2: [email protected] de subject3: [email protected] de subject 4: [email protected] de subject 5: Bill Gates <[email protected]> de subject

Page 26: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

• Send email using Gmail SMTP server• Set Mail content type (text/plain)

• Determine the Mail Server for Any Domain:– Click Start.– CMD– Type nslookup– Type set type = mx – type the name of the domain. Example: google.com

Page 27: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

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 28: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

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 29: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

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 30: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

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 31: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

MimeMessage Headers Session

Message Content: Multipart MimeBodyPart MimeBodyPart

String text

DataHandler

FileDataSource

File

String fileName

Page 32: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

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

Page 33: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

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

Page 34: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

• 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()

Page 35: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

• 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

Page 36: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

• 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

Page 37: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

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

Page 38: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

Email attachment Example-1MimeMessage 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 for text

MimeBodyPart mainBodyPart = new MimeBodyPart();

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

Page 39: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

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 40: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan

• http://www.oracle.com

Page 41: Topic : JavaMail API (1) Sending and Receiving Emails Kaster Nurmukan