Java – How to send Email
To send email in Java, we need JavaMail
pom.xml
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
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 = "[email protected]";
private static final String EMAIL_TO = "[email protected], [email protected]";
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 = "[email protected]";
private static final String EMAIL_TO = "[email protected], [email protected]";
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 = "<h1>Hello Java Mail \n ABC123</h1>";
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 = "[email protected]";
private static final String EMAIL_TO = "[email protected], [email protected]";
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();
}
}
}
For me need to specify TLSor SMTP in above code then it works.
prop.put(“mail.smtp.port”, “587”);
prop.put(“mail.smtp.auth”, “true”);
prop.put(“mail.smtp.starttls.enable”, “true”); //TLS
Hi Team, is there an example of how can one build code for SMTP email with TLS/SSL/ENCRYPT using office365 ?
what about Sun’s copyright for using javax.mail?
https://javaee.github.io/javamail/FAQ.html#free
“The JavaMail API implementation is completely free and open source and you can include it in your product”
I am trying to send CUCUMBER HTML report to email , html have some js files in another folder.
In my email only html file is displaying but js files not getting.
Could you please help me.
hallo where is SMTP Server …. anywhere in cloud …. super solution
for me need to send mail with eml attachment
it show error while saw the mail
eml attachment
plz do the needful for me