Java How to send Email
By:Roy.LiuLast updated:2019-08-11
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 = "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 = "<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 = "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();
From:一号门
COMMENTS