Send Email Using Java
In this tutorial, I am showing how to send an email using JavaMail Api. Sending email is a required use case for every project.
Here I am using gmail host( smtp.gmail.com) and gmail username and password for authentication. For a bigger projects, you have to use paid mail service provider and they will provide the required information like host and port parameters.
Here I am explaining following topics with complete examples
a) Sending plain text Email with JavaMail API
b) Sending HTML email with JavaMail API
c) Sending email attachment with JavaMail API
Dependency
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.javatips</groupId> <artifactId>javatips.net</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.5.0-b01</version> </dependency> </dependencies> </project>
a) Sending Plain text Email with JavaMail API
package com.javatips; import java.util.*; import javax.mail.*; import javax.mail.internet.*; public class SendEmail { public static void main(String[] args) { String from = "from@gmail.com"; String pass = "password"; String[] toAddress = new String[]{"to@gmail.com"}; String subject = "Java Mail Example"; String body = "Hi, how are you"; Properties properties = System.getProperties(); String host = "smtp.gmail.com"; properties.put("mail.smtp.starttls.enable", "true"); properties.put("mail.smtp.ssl.trust", host); properties.put("mail.smtp.user", from); properties.put("mail.smtp.password", pass); properties.put("mail.smtp.port", "587"); properties.put("mail.smtp.auth", "true"); Session session = Session.getDefaultInstance(properties); MimeMessage message = new MimeMessage(session); try { message.setFrom(new InternetAddress(from)); InternetAddress[] internetAddress = new InternetAddress[toAddress.length]; // iterate array of addresses for (int i = 0; i < toAddress.length; i++) { internetAddress[i] = new InternetAddress(toAddress[i]); } for (int i = 0; i < internetAddress.length; i++) { message.addRecipient(Message.RecipientType.TO, internetAddress[i]); } message.setSubject(subject); message.setText(body); Transport transport = session.getTransport("smtp"); transport.connect(host, from, pass); transport.sendMessage(message, message.getAllRecipients()); transport.close(); } catch (AddressException ae) { ae.printStackTrace(); } catch (MessagingException me) { me.printStackTrace(); } } }
b) Sending HTML email with JavaMail API
package com.javatips; import java.util.*; import javax.mail.*; import javax.mail.internet.*; public class SendHTMLEmail { public static void main(String[] args) { String from = "from@gmail.com"; String pass = "password"; String[] toAddress = new String[]{"to@gmail.com"}; String subject = "Java Mail Example"; String body = "<b>This is an example for HTML example</b>"; Properties properties = System.getProperties(); String host = "smtp.gmail.com"; properties.put("mail.smtp.starttls.enable", "true"); properties.put("mail.smtp.ssl.trust", host); properties.put("mail.smtp.user", from); properties.put("mail.smtp.password", pass); properties.put("mail.smtp.port", "587"); properties.put("mail.smtp.auth", "true"); Session session = Session.getDefaultInstance(properties); MimeMessage message = new MimeMessage(session); try { message.setFrom(new InternetAddress(from)); InternetAddress[] internetAddress = new InternetAddress[toAddress.length]; // iterate array of addresses for (int i = 0; i < toAddress.length; i++) { internetAddress[i] = new InternetAddress(toAddress[i]); } for (int i = 0; i < internetAddress.length; i++) { message.addRecipient(Message.RecipientType.TO, internetAddress[i]); } message.setSubject(subject); message.setContent(body, "text/html"); Transport transport = session.getTransport("smtp"); transport.connect(host, from, pass); transport.sendMessage(message, message.getAllRecipients()); transport.close(); } catch (AddressException ae) { ae.printStackTrace(); } catch (MessagingException me) { me.printStackTrace(); } } }
c) Sending email attachment with JavaMail API
package com.javatips; import java.util.*; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.*; import javax.mail.internet.*; public class SendAttachmentEmail { public static void main(String[] args) { String from = "from@gmail.com"; String pass = "password"; String[] toAddress = new String[] { "to@gmail.com" }; String subject = "Java Mail Example"; String body = "Hi, how are you"; Properties properties = System.getProperties(); String host = "smtp.gmail.com"; properties.put("mail.smtp.starttls.enable", "true"); properties.put("mail.smtp.ssl.trust", host); properties.put("mail.smtp.user", from); properties.put("mail.smtp.password", pass); properties.put("mail.smtp.port", "587"); properties.put("mail.smtp.auth", "true"); Session session = Session.getDefaultInstance(properties); MimeMessage message = new MimeMessage(session); try { message.setFrom(new InternetAddress(from)); InternetAddress[] internetAddress = new InternetAddress[toAddress.length]; // iterate array of addresses for (int i = 0; i < toAddress.length; i++) { internetAddress[i] = new InternetAddress(toAddress[i]); } for (int i = 0; i < internetAddress.length; i++) { message.addRecipient(Message.RecipientType.TO, internetAddress[i]); } message.setSubject(subject); message.setText(body); MimeBodyPart messageBodyPart = new MimeBodyPart(); Multipart multipart = new MimeMultipart(); String file = "exact path of file to be attached"; String fileName = "attachmentName"; DataSource source = new FileDataSource(file); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(fileName); multipart.addBodyPart(messageBodyPart); message.setContent(multipart); Transport transport = session.getTransport("smtp"); transport.connect(host, from, pass); transport.sendMessage(message, message.getAllRecipients()); transport.close(); } catch (AddressException ae) { ae.printStackTrace(); } catch (MessagingException me) { me.printStackTrace(); } } }