JavaMail Electronic Mail Concepts JavaMail Classes Examples of Sending JavaMail JavaBeans Activation Framework Multi-part Messages Example of Sending Attachments.

Slides:



Advertisements
Similar presentations
TOPIC : MIME (Multipurpose Internet Mail Extensions ) By: Cecilia Gomes COSC 541,DATA COMMUNICATION SYSTEMS & NETWORKS Instructor: Prof. Anvari (SEU)
Advertisements

Basic Communication on the Internet:
Ivan Maurits. Untuk mengirim menggunakan java anda harus memiliki JavaMail API dan Java Activation Framework (JAF) yang telah terinstall dalam komputer.
Topic : JavaMail API (1) Sending and Receiving s Kaster Nurmukan.
Lesson 7: Business, , & Personal Information Management
Application: Electronic Mail Linda Wu (CMPT )
Application Layer Pertemuan 25 Matakuliah: H0484/Jaringan Komputer Tahun: 2007.
Writing Simple Clients in Java Using Sockets using the JavaMail API.
J2EE JavaMail API Presented by Bartosz Sakowicz. Instalation Java Mail API: Java Activation Framework.
CSCE 515: Computer Network Programming Chin-Tser Huang University of South Carolina.
TCP/IP Protocol Suite 1 Chapter 20 Upon completion you will be able to: Electronic Mail: SMTP, POP, and IMAP Understand four configurations of architecture.
JavaMail JavaMail Classes Sending a Message Using JavaMail (MessageSend.java) Sending a Message to Multiple Recipients (SendToMany.java) Installing JavaMail.
CPSC 441: FTP & SMTP1 Application Layer: FTP & Instructor: Carey Williamson Office: ICT Class.
Chapter 30 Electronic Mail Representation & Transfer
CSCI 6962: Server-side Design and Programming Server Created .
Simple Mail Transfer Protocol
Architecture of SMTP, POP, IMAP, MIME.
Introduction 1 Lecture 7 Application Layer (FTP, ) slides are modified from J. Kurose & K. Ross University of Nevada – Reno Computer Science & Engineering.
1 JavaMail (1) Presented by: Ke Duan Instructor: Dr. V. “Juggy” Jagannathan.
JAVA MAIL API. High level representation of the basic components of any mail system. The components are represented by abstract classes in the javax.mail.
Sending and Receiving s
Mail Server Fitri Setyorini. Content SMTP POP3 How mail server works IMAP.
2: Application Layer1 Chapter 2 Application Layer These slides derived from Computer Networking: A Top Down Approach, 6 th edition. Jim Kurose, Keith Ross.
Electronic Mail (SMTP, POP, IMAP, MIME)
SMTP, POP3, IMAP.
1 Application Layer Lecture 5 Imran Ahmed University of Management & Technology.
Data Communications and Computer Networks Chapter 2 CS 3830 Lecture 9
CSE401N: Computer Networks Lecture-5 Electronic Mail S. M. Hasibul Haque Lecturer Dept. of CSE, BUET.
IT 424 Networks2 IT 424 Networks2 Ack.: Slides are adapted from the slides of the book: “Computer Networking” – J. Kurose, K. Ross Chapter 2: Application.
Intro to Computer Networks Bob Bradley The University of Tennessee at Martin.
Review: –How do we address “a network end-point”? –What services are provided by the Internet? –What is the network logical topology observed by a network.
Application Layer Protocols Simple Mail Transfer Protocol.
Chapter 7: Internet-Based Applications Business Data Communications, 6e.
Computer Networking From LANs to WANs: Hardware, Software, and Security Chapter 12 Electronic Mail.
Electronic Mail Originally –Memo sent from one user to another Now –Memo sent to one or more mailboxes Mailbox –Destination point for messages.
A form of communication in which electronic messages are created and transferred between two or more devices connected to a network.
1 Applications Electronic Mail. 2 Electronic Mail Many user applications use client-server architecture. Electronic mail client accepts mail.
Computer Networks26-1 Chapter 26. Remote Logging, Electronic Mail and File Transfer.
CPT 499 Internet Skills for Educators Electronic Mail Session Five.
Simple Mail Transfer Protocol (SMTP)
Sending Topic 4, Chapters 9, 10 Network Programming Kansas State University at Salina.
The Internet 8th Edition Tutorial 2 Basic Communication on the Internet: .
Electronic Mail. Client Software and Mail Hosts –Client PC has client software that communicates with user’s mail host –Mail hosts deliver.
What is and How Does it Work?  Electronic mail ( ) is the most popular use of the Internet. It is a fast and inexpensive way of sending messages.
File Transfer Protocol (FTP)
McGraw-Hill©The McGraw-Hill Companies, Inc., 2000 Network Protocols Chapter 26 (Data Communication and Networking): Remote Logging, Electronic Mail, and.
1 SMTP - Simple Mail Transfer Protocol –RFC 821 POP - Post Office Protocol –RFC 1939 Also: –RFC 822 Standard for the Format of ARPA Internet Text.
Topic : JavaMail API Kaster Nurmukan. Overview of JavaMail API Javax.mail.Session Javax.mail.Authenticator and PasswordAuthentication Javax.mail.Message.
Lecture 6: Sun: 8/5/1435 Distributed Applications Lecturer/ Kawther Abas CS- 492 : Distributed system & Parallel Processing.
SIMPLE MAIL TRANSFER PROTOCOL. Introduction Simple Mail Transfer Protocol is the standard protocol on the Internet and part of the TCP/IP protocol.
CS 3830 Day 9 Introduction 1-1. Announcements r Quiz #2 this Friday r Demo prog1 and prog2 together starting this Wednesday 2: Application Layer 2.
SMTP / MIME Florin Zidaru.
Internet Applications (Cont’d) Basic Internet Applications – World Wide Web (WWW) Browser Architecture Static Documents Dynamic Documents Active Documents.
Chapter 16: Distributed Applications Business Data Communications, 4e.
CS440 Computer Networks 1 Neil Tang 12/01/2008.
Slides based on Carey Williamson’s: FTP & SMTP1 File Transfer Protocol (FTP) r FTP client contacts FTP server at port 21, specifying TCP as transport protocol.
1 Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Electronic Mail: SMTP, POP IMAP, and MIME.
COMP 431 Internet Services & Protocols
1 Kyung Hee University Chapter 22 Simple Mail Transfer Protocol (SMTP)
26.1 Electronic Mail Sending/Receiving Mail Addresses User Agent MIME Mail Transfer Agent Mail Access Protocols.
Week-2 (Lecture-1) An electronic message sent from one computer to another. contains account i.e. How does.
Spring 2006 CPE : Application Layer_ 1 Special Topics in Computer Engineering Application layer: Some of these Slides are Based on Slides.
درس مهندسی اینترنت – مهدی عمادی مهندسی اینترنت برنامه‌نویسی در اینترنت 1 SMTP, FTP.
SMTP - Simple Mail Transfer Protocol POP - Post Office Protocol
Networking Applications
JavaMail Electronic Mail Concepts JavaMail Classes
Remote Logging, Electronic Mail, and File Transfer
Data Communications and Computer Networks Chapter 2 CS 3830 Lecture 9
William Stallings Data and Computer Communications
Chapter 7 Network Applications
Presentation transcript:

JavaMail Electronic Mail Concepts JavaMail Classes Examples of Sending JavaMail JavaBeans Activation Framework Multi-part Messages Example of Sending Attachments Other JavaMail Classes Installing JavaMail

Some Key Terms Protocol: An agreed upon format for transmitting data between two devices, including codes for indicating completion of transmission and acknowledgement of data receipt User-Agent: client that allows user to create to be sent or view that has been received Mail Transfer Agent (MTA): Performs exchange of over TCP

Parts of an Message Envelope Content –Headers –Body

Envelope Used by MTA to deliver messages Contains source and destination addresses Example: MAIL RCPT

Headers Used by user-agent to describe message Written in ASCII text Each field contains a name followed by a colon, followed by the field value Whitespace may only appear at the beginning of a line that continues a field from a prior line A blank line indicates the end of the headers

Common Headers From Reply-To Date To CC Subject

Types of Message Bodies One or more lines of NVT ASCII (7-bit variant) text representing actual message Multipurpose Internet Mail Extension (MIME): Common representation for e- mails sent in binary ( attachments, embedded graphics, or non-ASCII characters )

MIME Content-Type Header most used MIME-specific header Examples Text Multipart Message Application Image Audio Video

Protocols Message Store Protocols : Read messages from a server –Internet Message Access Protocol (IMAP) –Post Office Protocol (POP) Message Transport Protocols : Send messages to a server (i.e. Simple Mail Transfer Protocol (SMTP))

Disadvantages of POP Only permits access to a single mail folder Does not include flags for identifying new and unseen messages Does not include a “Received Date” Does not update new messages while inbox is open

SMTP raddist.rad.com/networks/1998/smtp/smtp.htm

Overview of SMTP Transfers mail from host-to-host over TCP, port 25 Sends commands in ASCII, terminated by newlines Transmits requests and responses asymmetrically between a Sender-SMTP and a Recipient-SMTP Recipient may be destination host or intermediary, relay SMTP-server Commands and replies are not case sensitive

Receiver-SMTP Responses Sender-SMTP awaits reply to each message before progressing SMTP supports spooling: message is placed on queue and held if there is a delivery problem Reply Format –Three ASCII digits –Hyphen (space on the last line) –Zero or more bytes of text –Closing code

SMTP Process Sender-SMTP establishes transmission channel with a receiver-SMTP Sender-SMTP transmits a MAIL command which identifies the sender Receiver-SMTP responds If ok, Sender-SMTP transmits an RCPT command identifying one or more recipients, one at a time Receiver-SMTP responds for each recipient If ok, Sender-SMTP sends data terminated by a special character SMTP-receiver responds

Example of SMTP Procedure S: MAIL R: 250 OK S: RCPT R: 250 DOESN’T NEED TO SAY OK SINCE 3 DIGIT CODE IS KEY S: RCPT R: 550 No such user here S: DATA R: 354 Start mail input; end with. S: Random content… S: More randome content S:. R: 250 OK Code 250 means everything is OK Couldn’t send message to

Java.util.Properties Class Extends HashMap ( basically another collection ) Designed to contain a persistent set of properties that may be saved to or loaded from a stream All keys and values must be Strings Although it supports HashMap methods for handling Objects, use of the following is recommended to ensure that it contains Strings: –public Object setProperty(String key, String value) –public String getProperty(String key)

Classes to Send Address : Abstract class representing an address Message : Abstract class representing a message Transport : Object representing a transport protocol that allows messages to be sent, implemented by a specific protocol Session : Provides an interface between the e- mail client and the network, supporting the creation of and access to Store and Transport objects

Message Representation

Javax.mail.Session Class representing an individual mail session Manages configuration of system Handles authentication (usually needed for receiving rather than sending mail) Acts as a factory for Transport and Store objects Session has no public constructor Create a session with: public Session getDefaultInstance(Properties prop)

Session Properties Used to Send Mail at CMU

Javax.Mail.Transport Abstract class modeling a message Transport By using Session to create a Transport object or to access static Transport methods, the user is abstracted from identifying the appropriate implementing subclass

Instantiating a Transport Factory Methods of Session object public Transport getTransport() public Transport getTransport(String protocol) Sending a Message Message method: public void saveChanges() Transport method: public void sendMessage (Message msg, Address[] addresses) Uses Transport protocol in Session properties If you do not save a message before calling sendMessage(), it will not work

Using Static send() Methods Eliminates the need to instantiate a Transport object Eliminates the need to call the saveMessage() method, since the static send() methods of Transport do that automatically –public static send(Message msg) –public static send(Message msg, Address[] addresses)

Address Abstract class representing any electronic address Most common implementation is for addresses: javax.mail.internet.InternetAddress

InternetAddress Key Fields String address: Represents the address String personal: Represents the name of the addressee

Constructors InternetAddress(String address) InternetAddress ia = new InternetAddress(String address, String personal) InternetAddress ia = new “Mike McCarthy”);

Additional Factory Method static InternetAddress[] parse(String listOfAddresses, boolean strict) throws AddressException Static method Returns an array of InternetAddresses listOfAddresses is a comma or space delimited list of addresses If strict is true, space delimited is prohibited AddressException indicates parsing failed false));

Standard Accessors and Mutators public void setAddress(String) public void setPersonal(String) public String getPersonal() public String getAddress()

Message Classes javax.mail.Message: Abstract class representing an message javax.mail.Part: Interface implemented by Message class defining properties and content of mail messages Javax.mail.internet.MimeMessage: –Extends Message class and provides functionality to produce MIME messages –Most common constructor: MimeMessage(Session session)

Message.RecipientType Innerclass of Message Possible values: –TO –CC –BCC –NEWSGROUPS

MimeMessage Header Methods Setting Recipients public void setRecipient(Message.RecipientType type, Address address) public void setRecipients(Message.RecipientType type, Address[] addresses) Adding Additional Recipients public void addRecipient(Message.RecipientType type, Address address) public void addrecipients(Message.RecipientType type, Address[] addresses) Getting Recipients public Address[] getRecipients(Message.RecipientType type) public Address[] getAllRecipients()

Setting From Header public void setFrom() Sets from to default from property specified in Session properties public void setFrom(Address address) Public void addFrom(Address[] addresses) Adds one or more addresses to those already listed in the from header Getting From Header public Address[] getFrom() Reply-To Header public void setReplyTo(Address[] addresses) public Address[] getReplyTo() Note that several methods use arrays of Addresses

Subject Header public void setSubject(String subject) public String getSubject() Sent Date Header public void setSentDate(Date date) public Date getSentDate()

Content of a Single-Part Message public void setText(String text) Defaults to ASCII public void setText(String text, String charset) Used for non-ASCII messages or to improve performance if there is a lot of text

Note About Examples As always, you are encouraged to experiment with the examples that are provided. However, you must make sure that you use your own address in the from, reply-to, and to headers so as not to “spam” anyone.

Example 1: MessageSend.java Sends an message from one person to another import java.io.*; import java.net.InetAddress; import java.util.Properties; import java.util.Date; import javax.mail.*; import javax.mail.internet.*; address class Properties class Directory containing abstract mail classes Internet classes

createSession() public Session createSession() { Properties p = System.getProperties(); p.setProperty("mail.transport.protocol", "smtp"); p.setProperty("mail.smtp.host","andrew.cmu.edu"); Gets the default system properties Sets the transport protocol to SMTP and sets the appropriate SMTP host for CMU

p.setProperty("mail.store.protocol","imap"); p.setProperty("mail.imap.host","cyrus.andrew.cmu.edu"); Session sess = Session.getDefaultInstance(p); return sess; } Instantiates a session using the new properties object Sets the store protocol to IMAP and sets the appropriate SMTP host for CMU (not really needed unless the application will read )

createMessage() public Message createMessage(Session sess) throws MessagingException{ Message mess = new MimeMessage(sess); Base exception class for Internet mail Default Constructor for a MimeMessage

mess.setFrom(new mess.setRecipients(Message.RecipientType.TO, false)); mess.setSubject("Test"); mess.setText("This is a test of JavaMail's functionality."); mess.setSentDate(new Date()); return mess; } setRecipients(MessageRecipientType type, String address)

main() public static void main(String[] args) { MessageSend send = new MessageSend(); Session sess = send.createSession(); try { Message mess = send.createMessage(sess); Transport.send(mess); } catch(MessagingException e) { System.out.println("Messaging Exception: "+e); } A static method of the Transport class saves and sends a message

Example 2:MessageSendToMany Sends a message to a group of addresses import java.io.*; import java.net.InetAddress; import java.util.Properties; import java.util.Date; import javax.mail.*; import javax.mail.internet.*; public class MessageSendToEach { public Session createSession() { Properties p = System.getProperties(); p.setProperty("mail.transport.protocol", "smtp"); p.setProperty("mail.smtp.host","andrew.cmu.edu"); p.setProperty("mail.store.protocol","imap"); p.setProperty("mail.imap.host","cyrus.andrew.cmu.edu"); Session sess = Session.getDefaultInstance(p); return sess; } Almost everything is the same

createMessage() public Message createMessage(Session sess)throws MessagingException, UnsupportedEncodingException { Message mess = new MimeMessage(sess); InternetAddress[] recip = new InternetAddress[6]; InternetAddress[] reply = new InternetAddress[1]; reply [0] = new “Danielle Medvan”); Note the additional exception being thrown This constructor of InternetAddress throws an UnsupportedEncodingException if the e- mail software does not support the character encoding in which the name is provided

recip[0]= new "Gary"); recip[1]= new “Tzuan-Ta"); recip[2]= new “Rebecca"); recip[3]= new “Mark"); recip[4]= new “Gina"); recip[5]= new “Cameron"); mess.setFrom(new

mess.setReplyTo(reply); mess.setRecipients(Message.RecipientType.TO,recip); mess.setSubject("Test"); mess.setText("This is a test of JavaMail's functionality."); mess.setSentDate(new Date()); return mess; } The “reply-to” address is set with setReplyTo(Address[] addresses) We saw the method to set a single recipient. Now we see the method to set multiple recipients

Same main() public static void main(String[] args) { MessageSendToMany send = new MessageSendToMany(); Session sess = send.createSession(); try { Message mess = send.createMessage(sess); Transport.send(mess); } catch(MessagingException e) { System.out.println("Messaging Exception: "+e); }

JavaBean Activation Framework (JAF) In multi-part messages, client needs to handle a variety of file types with a consistent interface JAF classes initialize appropriate beans Used by JavaMail clients to interact with messages –Determine content type –Discover commands supported on that content type –Display messages –Access data to enable execution of commands

MultiPart Representation

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 attachments –Constructors FileDataSource(File file) FileDataSource(String filename)

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)

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

javax.mail.MimeBodyPart Implements the Part interface (indirectly through a few abstract classes) Contains the content for a single part of an 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

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

Example 3: SendAttachment.java Sends an address from one person to another import java.io.*; import java.net.InetAddress; import java.util.Properties; import java.util.Date; import javax.mail.*; import javax.mail.internet.*; public class MessageSendToEach { public Session createSession() { Properties p = System.getProperties(); p.setProperty("mail.transport.protocol", "smtp"); p.setProperty("mail.smtp.host","andrew.cmu.edu"); p.setProperty("mail.store.protocol","imap"); p.setProperty("mail.imap.host","cyrus.andrew.cmu.edu"); Session sess = Session.getDefaultInstance(p); return sess; } Almost everything is the same

createMessage() public Message createMessage(Session sess) throws MessagingException{ Message mess = new MimeMessage(sess); mess.setFrom(new mess.setRecipients(Message.RecipientType.TO, false)); mess.setSubject("Test"); mess.setSentDate(new Date()); Still the same

MimeBodyPart mainMessage = new MimeBodyPart(); mainMessage.setText("This is a test of JavaMail's functionality."); FileDataSource source = new FileDataSource("c:\\autoexec.bat"); MimeBodyPart attach = new MimeBodyPart(); attach.setDataHandler(new DataHandler(source)); attach.setFileName(source.getName()); Instantiate a MimeBodyPart to contain the text of the e- mail message Construct a FileDateSource with the full path of the file it should contain (This will be the attachment) Construct another MimeBodyPart containing a new DataHandler that contains the FileDataSource Set the attachment’s file name to equal the name of the FileDataSource

Multipart multi = new MimeMultipart(); multi.addBodyPart(mainMessage); multi.addBodyPart(attach); mess.setContent(multi); return mess; } Instantiate a MimeMultipart Add the bodyparts (message and attachment) to the MimeMultipart Assign the MimeMultipart to be the content of the message

Same main() public static void main(String[] args) { SendAttachment send = new SendAttachment(); Session sess = send.createSession(); try { Message mess = send.createMessage(sess); Transport.send(mess); } catch(MessagingException e) { System.out.println("Messaging Exception: "+e); }

Other JavaMail Classes Store: Object representing database and access protocol for storing and accessing messages and folders, implemented by a specific protocol (IMAP or POP3) Folder: Contains messages and subfolders and supports reading and deleting them MailEvent: Can be registered with event listeners to catch events generated by Transport, Store, and Folder objects (i.e. announce arrival of new ) Note: Using JavaMail in Netscape browsers requires you to download the Java Plug-in because of Netscape’s security restrictions

Installation Instructions 1.Download the JavaMail API Implementation Version 1.2 at 2.Download the JavaBeans Application Framework (JAF) at: 3.Unzip both files. 4.Add the following files to your classpath: –mail.jar (JavaMail) –activation.jar (JAF file)

For More Information mtp.htm Java Server Programming: J2EE Edition by Allamaraju et.al., Wrox Publishing, ©2000