1. Precondition
1) Import mail-1.4.1.jar for basic javax.mail api which can be found here
http://www.oracle.com/technetwork/java/javamail/index-138643.html
2) Import greenmail-1.3.1.jar for easy mail test which can be found here
http://www.icegreen.com/greenmail/
3) Import JUnit4 Library
2. A simple example for sending pure text email <Test passed!>
package edu.xmu.mail; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import org.junit.Before; import org.junit.Test; public class SendMail { private static final String SMTP_HOST_NAME = "smtp.gmail.com"; private static final String SMTP_AUTH_USER = "[email protected]"; private static final String SMTP_AUTH_PWD = "*******"; private static final String SMTP_PORT_NUM = "465"; @Before public void setUp() { } @Test public void sendMail() { String[] fakeToList = { "[email protected]", "[email protected]" }; InternetAddress[] realToList = new InternetAddress[fakeToList.length]; String from = "[email protected]"; String subject = "Hello World!"; String content = "This is a test email from java-mail"; Transport transport = null; // Set the host smtp address Properties properties = System.getProperties(); properties.put("mail.smtp.host", SMTP_HOST_NAME); properties.put("mail.smtp.user", SMTP_AUTH_USER); properties.put("mail.smtp.port", SMTP_PORT_NUM); properties.put("mail.smtp.socketFactory.port", SMTP_PORT_NUM); properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); properties.put("mail.smtp.auth", "true"); properties.put("mail.smtp.debug", "true"); properties.put("mail.smtp.starttls.enable", "true"); properties.put("javax.net.ssl.SSLSocketFactory", "false"); Authenticator auth = new SMTPAuthenticator(); Session session = Session.getDefaultInstance(properties, auth); MimeMessage message = new MimeMessage(session); try { message.setFrom(new InternetAddress(from)); for (int i = 0; i < fakeToList.length; i++) { realToList[i] = new InternetAddress(fakeToList[i]); } message.setRecipients(Message.RecipientType.TO, realToList); message.setSubject(subject); message.setContent(content, "text/plain"); // For HTML-Email // message.setContent(content, "text/html"); transport = session.getTransport("smtp"); transport.connect(SMTP_HOST_NAME, Integer.valueOf(SMTP_PORT_NUM) .intValue(), SMTP_AUTH_USER, SMTP_AUTH_PWD); transport.sendMessage(message, message.getAllRecipients()); System.out.println("Message sent successflly..."); } catch (AddressException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MessagingException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { transport.close(); } catch (MessagingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } private class SMTPAuthenticator extends Authenticator { @Override public PasswordAuthentication getPasswordAuthentication() { String username = SMTP_AUTH_USER; String password = SMTP_AUTH_PWD; return new PasswordAuthentication(username, password); } } }
3. A more complex example for sending email with attachment <Test passed!>
package edu.xmu.mail; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.Authenticator; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import org.junit.Before; import org.junit.Test; public class SendMail { private static final String SMTP_HOST_NAME = "smtp.gmail.com"; private static final String SMTP_AUTH_USER = "[email protected]"; private static final String SMTP_AUTH_PWD = "******"; private static final String SMTP_PORT_NUM = "465"; @Before public void setUp() { } @Test public void sendMail() { String[] fakeToList = { "[email protected]", "[email protected]" }; InternetAddress[] realToList = new InternetAddress[fakeToList.length]; String from = "[email protected]"; String subject = "Hello World!"; String content = "This is a test email from java-mail"; Transport transport = null; // Set the host smtp address Properties properties = System.getProperties(); properties.put("mail.smtp.host", SMTP_HOST_NAME); properties.put("mail.smtp.user", SMTP_AUTH_USER); properties.put("mail.smtp.port", SMTP_PORT_NUM); properties.put("mail.smtp.socketFactory.port", SMTP_PORT_NUM); properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); properties.put("mail.smtp.auth", "true"); properties.put("mail.smtp.debug", "true"); properties.put("mail.smtp.starttls.enable", "true"); properties.put("javax.net.ssl.SSLSocketFactory", "false"); Authenticator auth = new SMTPAuthenticator(); Session session = Session.getDefaultInstance(properties, auth); MimeMessage message = new MimeMessage(session); System.out.println("CurrentPath = " + ClassLoader.getSystemResource("") + "attachment.txt"); try { message.setFrom(new InternetAddress(from)); for (int i = 0; i < fakeToList.length; i++) { realToList[i] = new InternetAddress(fakeToList[i]); } message.setRecipients(Message.RecipientType.TO, realToList); message.setSubject(subject); // Create a multi-part message Multipart multipart = new MimeMultipart(); // Set part one -> plain text BodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.setText(content); multipart.addBodyPart(messageBodyPart); // Set part two -> attachment BodyPart attachmentBodyPart = new MimeBodyPart(); String fileName = ClassLoader.getSystemResource("").toString() .replaceAll("%20", " ").replaceAll("file:/", "") + "attachment.txt"; DataSource source = new FileDataSource(fileName); attachmentBodyPart.setDataHandler(new DataHandler(source)); attachmentBodyPart.setFileName("attachment.txt"); multipart.addBodyPart(attachmentBodyPart); message.setContent(multipart); transport = session.getTransport("smtp"); transport.connect(SMTP_HOST_NAME, Integer.valueOf(SMTP_PORT_NUM) .intValue(), SMTP_AUTH_USER, SMTP_AUTH_PWD); transport.sendMessage(message, message.getAllRecipients()); System.out.println("Message sent successflly..."); } catch (AddressException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MessagingException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { transport.close(); } catch (MessagingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } private class SMTPAuthenticator extends Authenticator { @Override public PasswordAuthentication getPasswordAuthentication() { String username = SMTP_AUTH_USER; String password = SMTP_AUTH_PWD; return new PasswordAuthentication(username, password); } } }
P.S
Good resource to refer to:
1) https://java.net/projects/javamail/pages/Home
2) http://stackoverflow.com/questions/1990454/using-javamail-to-connect-to-gmail-smtp-server-ignores-specified-port-and-tries ---> Inspired me a lot in configure gmail smtp service
3) http://blog.csdn.net/zapldy/article/details/3971579 ---> A very detailed blog about Java Mail
4) http://704378737-qq-com.iteye.com/blog/796566 ---> A very detailed blog about Java Path