Чтобы отправить электронное письмо на Java, нам нужно JavaMail
com.sun.mail javax.mail 1.6.2
1. Отправить Электронное Письмо
Отправьте обычное электронное письмо в текстовом формате.
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. Отправка электронной почты в формате HTML
Ключ – создать пользовательскую javax.активацию. Источник данных
для обработки формата HTML.
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. Отправить электронное письмо с вложением
3.1 Ключом является создание Часть подражания
и добавьте его в Составная часть
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 Полный пример того, как прикрепить файл в качестве вложения и отправить его.
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(); } } }
Рекомендации
- Явамайл
- API JavaMail для JavaMail – Отправка электронной почты через пример SMTP Gmail
Оригинал: “https://mkyong.com/java/java-how-to-send-email/”