To send email in Java, we need JavaMail
pom.xml
com.sun.mail
javax.mail
1.6.2
1. Send Email
Send a normal email in text format.
SendEmailSMTP.java
package com.mkyong;
import com.sun.mail.smtp.SMTPTransport;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;
public class SendEmailSMTP {
// for example, smtp.mailgun.org
private static final String SMTP_SERVER = "smtp server ";
private static final String USERNAME = "";
private static final String PASSWORD = "";
private static final String EMAIL_FROM = "From@gmail.com";
private static final String EMAIL_TO = "email_1@yahoo.com, email_2@gmail.com";
private static final String EMAIL_TO_CC = "";
private static final String EMAIL_SUBJECT = "Test Send Email via SMTP";
private static final String EMAIL_TEXT = "Hello Java Mail \n ABC123";
public static void main(String[] args) {
Properties prop = System.getProperties();
prop.put("mail.smtp.host", SMTP_SERVER); //optional, defined in SMTPTransport
prop.put("mail.smtp.auth", "true");
prop.put("mail.smtp.port", "25"); // default port 25
Session session = Session.getInstance(prop, null);
Message msg = new MimeMessage(session);
try {
// from
msg.setFrom(new InternetAddress(EMAIL_FROM));
// to
msg.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(EMAIL_TO, false));
// cc
msg.setRecipients(Message.RecipientType.CC,
InternetAddress.parse(EMAIL_TO_CC, false));
// subject
msg.setSubject(EMAIL_SUBJECT);
// content
msg.setText(EMAIL_TEXT);
msg.setSentDate(new Date());
// Get SMTPTransport
SMTPTransport t = (SMTPTransport) session.getTransport("smtp");
// connect
t.connect(SMTP_SERVER, USERNAME, PASSWORD);
// send
t.sendMessage(msg, msg.getAllRecipients());
System.out.println("Response: " + t.getLastServerResponse());
t.close();
} catch (MessagingException e) {
e.printStackTrace();
2. Send Email in HTML format
The key is create a custom javax.activation.DataSource to handle HTML format.
SendEmailHTML.java
package com.mkyong;
import com.sun.mail.smtp.SMTPTransport;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.Properties;
public class SendEmailHTML {
// for example, smtp.mailgun.org
private static final String SMTP_SERVER = "smtp server ";
private static final String USERNAME = "";
private static final String PASSWORD = "";
private static final String EMAIL_FROM = "From@gmail.com";
private static final String EMAIL_TO = "email_1@yahoo.com, email_2@gmail.com";
private static final String EMAIL_TO_CC = "";
private static final String EMAIL_SUBJECT = "Test Send Email via SMTP (HTML)";
private static final String EMAIL_TEXT = "
Hello Java Mail \n ABC123
";public static void main(String[] args) {
Properties prop = System.getProperties();
prop.put("mail.smtp.auth", "true");
Session session = Session.getInstance(prop, null);
Message msg = new MimeMessage(session);
try {
msg.setFrom(new InternetAddress(EMAIL_FROM));
msg.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(EMAIL_TO, false));
msg.setSubject(EMAIL_SUBJECT);
// TEXT email
//msg.setText(EMAIL_TEXT);
// HTML email
msg.setDataHandler(new DataHandler(new HTMLDataSource(EMAIL_TEXT)));
SMTPTransport t = (SMTPTransport) session.getTransport("smtp");
// connect
t.connect(SMTP_SERVER, USERNAME, PASSWORD);
// send
t.sendMessage(msg, msg.getAllRecipients());
System.out.println("Response: " + t.getLastServerResponse());
t.close();
} catch (MessagingException e) {
e.printStackTrace();
static class HTMLDataSource implements DataSource {
private String html;
public HTMLDataSource(String htmlString) {
html = htmlString;
@Override
public InputStream getInputStream() throws IOException {
if (html == null) throw new IOException("html message is null!");
return new ByteArrayInputStream(html.getBytes());
@Override
public OutputStream getOutputStream() throws IOException {
throw new IOException("This DataHandler cannot write HTML");
@Override
public String getContentType() {
return "text/html";
@Override
public String getName() {
return "HTMLDataSource";
3. Send Email with Attachment
3.1 The key is creating MimeBodyPart and add it into Multipart
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
// text
MimeBodyPart p1 = new MimeBodyPart();
p1.setText(EMAIL_TEXT);
// file
MimeBodyPart p2 = new MimeBodyPart();
FileDataSource fds = new FileDataSource("path/example.txt");
p2.setDataHandler(new DataHandler(fds));
p2.setFileName(fds.getName());
Multipart mp = new MimeMultipart();
mp.addBodyPart(p1);
mp.addBodyPart(p2);
msg.setContent(mp);
3.2 A complete example to attach a file as an attachment, and send it out.
SendEmailAttachment.java
package com.mkyong;
import com.sun.mail.smtp.SMTPTransport;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Properties;
public class SendEmailAttachment {
// for example, smtp.mailgun.org
private static final String SMTP_SERVER = "smtp server ";
private static final String USERNAME = "";
private static final String PASSWORD = "";
private static final String EMAIL_FROM = "From@gmail.com";
private static final String EMAIL_TO = "email_1@yahoo.com, email_2@gmail.com";
private static final String EMAIL_TO_CC = "";
private static final String EMAIL_SUBJECT = "Test Send Email via SMTP (ATTACHMENT)";
private static final String EMAIL_TEXT = "Hello Java Mail \n ABC123";
public static void main(String[] args) {
Properties prop = System.getProperties();
prop.put("mail.smtp.auth", "true");
Session session = Session.getInstance(prop, null);
Message msg = new MimeMessage(session);
try {
msg.setFrom(new InternetAddress(EMAIL_FROM));
msg.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(EMAIL_TO, false));
msg.setSubject(EMAIL_SUBJECT);
// text
MimeBodyPart p1 = new MimeBodyPart();
p1.setText(EMAIL_TEXT);
// file
MimeBodyPart p2 = new MimeBodyPart();
FileDataSource fds = new FileDataSource("path/example.txt");
p2.setDataHandler(new DataHandler(fds));
p2.setFileName(fds.getName());
Multipart mp = new MimeMultipart();
mp.addBodyPart(p1);
mp.addBodyPart(p2);
msg.setContent(mp);
SMTPTransport t = (SMTPTransport) session.getTransport("smtp");
// connect
t.connect(SMTP_SERVER, USERNAME, PASSWORD);
// send
t.sendMessage(msg, msg.getAllRecipients());
System.out.println("Response: " + t.getLastServerResponse());
t.close();
} catch (MessagingException e) {
e.printStackTrace();