Рубрики
Без рубрики

Java – Как отправлять электронную почту

– Java – Как отправлять электронную почту

Чтобы отправить электронное письмо на 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/”