Click here to load reader
Upload
vantinhkhuc
View
275
Download
1
Embed Size (px)
DESCRIPTION
Citation preview
JavaMail API Fundamentals
JavaMail Setup
Add JAR filesmail.jar and activation.jar to CLASSPATH, to jre/lib/ext
Included with Java 2 platform, Enterprise Edition
Core Classes
SessionMessage / MimeMessageInternetAddressAuthenticatorTransportStore
Session
Represents a mail session with serverUses Properties to get things like mail host
mail.transport.defaultmail.smtp.host
Get session - no constructor
Properties props = new Properties();props.put(“mail.transport.default”, “smtp”);props.put(“mail.smtp.host”, “mail.cs.wmich.edu”);Session session = Session.getInstance(props, null); // null for AuthenticatorSession session = Session.getDefaultInstance(props, null);
Message / MimeMessage
Represents a mail messageMessage abstract classimplements PartMimeMessage is MIME style email messageimplements MimePart
Get message from sessionMimeMessage message = new MimeMessage(session);
Set partsmessage.setContent() / mimeMessage.setText()
InternetAddress
RFC822 AddressCreate:
new InternetAddress(“[email protected]");new InternetAddress(“[email protected] ", “Bill Someone");
For To, From, CC, BCCmessage.setFrom(address)message.addRecipient(type, address)Types
Message.RecipientType.TOMessage.RecipientType.CCMessage.RecipientType.BCC
Authenticator
Permit mechanism to prompt for username and password
javax.mail.Authenticator != java.net.AuthenticatorExtend AuthenticatorOverride:public PasswordAuthentication getPasswordAuthentication(){
String username, password; // Then get them ...return new PasswordAuthentication(username, password);
}
Transport
Message transport mechanismGet transport for session
Transport transport = session.getTransport("smtp");Connect
transport.connect(host, username, password);Act - repeat if necessary
transport.sendMessage(message, message.getAllRecipients());
Donetransport.close();
Sending Mail
Need a working SMTP serverCan be written in Java using JavaMailAPI need from/to addresses, but don’t need to be valid, unless SMTP server includes some form of verification
Sending Mail
import java.util.Properties;import javax.mail.*;import javax.mail.internet.*;
public class MailExample {public static void main (String args[]) throws Exception {String host = args[0];String from = args[1];String to = args[2];
// Get system propertiesProperties props = System.getProperties();
// Setup mail serverprops.put("mail.smtp.host", host);
Sending Mail (contd.)
// Get sessionSession session = Session.getInstance(props, null);
// Define messageMimeMessage message = new MimeMessage(session);message.setFrom(new InternetAddress(from));message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject(“Test E-mail");message.setText(“Hello World!");
// Send messageTransport.send(message);
}}
Getting Mail
There are mailbox store providers available (POP3 and IMAP).
Getting Mail
import java.io.*;import java.util.Properties;import javax.mail.*;import javax.mail.internet.*;public class GetMessageExample {public static void main (String args[]) throws Exception {String host = args[0];String username = args[1];String password = args[2];
// Create empty propertiesProperties props = new Properties();
// Get sessionSession session = Session.getInstance(props, null);
Getting Mail (contd.)
// Get the storeStore store = session.getStore("pop3");store.connect(host, username, password);
// Get folderFolder folder = store.getFolder("INBOX");folder.open(Folder.READ_ONLY);
BufferedReader reader = new BufferedReader (new InputStreamReader(System.in));
// Get directoryMessage message[] = folder.getMessages();for (int i=0, n=message.length; i<n; i++) {
Getting Mail (contd.)
System.out.println(i + ": " + message[i].getFrom()[0] + "\t" + message[i].getSubject());
System.out.println("Do you want to read message? [YES to read/QUIT to end]");String line = reader.readLine();if ("YES".equals(line)) {message[i].writeTo(System.out);
} else if ("QUIT".equals(line)) {break;
}}// Close connection folder.close(false);store.close();
}}
Authenticator Usage
Put host in propertiesProperties props = new Properties();props.put("mail.host", host);
Setup authentication, get sessionAuthenticator auth = new PopupAuthenticator();Session session = Session.getInstance(props, auth);
Get the storeStore store = session.getStore("pop3");store.connect();
Sending Attachments
Each attachment goes into a MimeBodyPart
DataHandler deals with reading in contents
Provide it with a URLDataSource or FileDataSource.
Sending Attachments
// create mime message object and set the required parametersMimeMessage message = createMessage(to, cc, subject);
// create the message part MimeBodyPart messageBodyPart = new MimeBodyPart();
//fill messagemessageBodyPart.setText(msg);
Multipart multipart = new MimeMultipart();multipart.addBodyPart(messageBodyPart);
// fill the array of files to be attachedFile [] attachments = { .... }
Sending Attachments (Contd.)
for( int i = 0; i < attachments.length; i++ ) {messageBodyPart = new MimeBodyPart();FileDataSource fileDataSource =new FileDataSource(attachments[i]);messageBodyPart.setDataHandler(new DataHandler(fileDataSource));messageBodyPart.setFileName(attachments[i].getName());multipart.addBodyPart(messageBodyPart);
}// add the Multipart to the messagemessage.setContent(multipart);
// SEND THE MESSAGETransport.send(message);
Notification Events
Transport/Store/Folder.addConnectionListener()open, closed, disconnected
Folder.addFolderListener()created, deleted, renamed
Folder.addMessageCountListener()Find out when new messages are received
Folder.addMessageChangeListenerchanged
Store.addStoreListenernotification
Transport.addTransportListenermessage delivered, not delivered, partially delivered