Как отправить Email в Java? – Devcolibri – Android для начинающих

Как отправить Email в Java?

Давайте разберемся, как отправить email в Java используя почтовый сервер Google Gmail.

Как я уже говорил отправлять мы будем через почтовый сервер Gmail.

Для этого нам нужны данные Outgoing Mail (SMTP) Server:

Host: smtp.gmail.com
Use Authentication: Yes
Port for TLS/STARTTLS: 587
Port for SSL: 465

И уже с их помощью мы можем обращаться к серверу Gmail.

Тут можно ознакомится с кратким описанием https://support.google.com/mail/answer/13287?hl=en

Немного теории Wiki

TLS (Transport Layer Security) — криптографические протоколы, обеспечивающие защищённую передачу данных между узлами в сети Интернет, TLS и SSL используют асимметричную криптографию для обмена ключами, симметричное шифрование для конфиденциальности и коды аутентичности сообщений для сохранения целостности сообщений.

SSL (Secure Sockets Layer — уровень защищённых сокетов) — криптографический протокол, который обеспечивает безопасность связи. Он использует асимметричную криптографию для аутентификации ключей обмена, симметричное шифрование для сохранения конфиденциальности, коды аутентификации сообщений для целостности сообщений. Протокол широко используются для обмена мгновенными сообщениями и передачи голоса через IP, в таких приложениях, как электронная почта, Интернет-факс и др.

Мы попробуем отправить сообщение оба способами.

Шаг 1

Создаем maven проект и называем его SendMail.

И добавляем в него зависимость библиотеки JavaMail API:

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4</version>
</dependency>

Шаг 2

После создаем в нем пакет com.devcolibri.tls и тут создадим класс Sender.java:

package com.devcolibri.tls;

import java.util.Properties;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class Sender {

    private String username;
    private String password;
    private Properties props;

    public Sender(String username, String password) {
        this.username = username;
        this.password = password;

        props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.port", "587");
    }

    public void send(String subject, String text, String fromEmail, String toEmail){
        Session session = Session.getInstance(props, new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
        });

        try {
            Message message = new MimeMessage(session);
            //от кого
            message.setFrom(new InternetAddress(username));
            //кому
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail));
            //Заголовок письма
            message.setSubject(subject);
            //Содержимое
            message.setText(text);

            //Отправляем сообщение
            Transport.send(message);
        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }
    }
}

В строке 21 мы активируем протокол TLS.

Шаг 3

Теперь попробуем написать отправку по протоколу SSL.

Создаем пакет com.devcolibri.ssl и тут создадим класс Sender.java:

package com.devcolibri.ssl;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;

public class Sender {

    private String username;
    private String password;
    private Properties props;

    public Sender(String username, String password) {
        this.username = username;
        this.password = password;

        props = new Properties();
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.socketFactory.port", "465");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.port", "465");
    }

    public void send(String subject, String text, String fromEmail, String toEmail){
        Session session = Session.getDefaultInstance(props, new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
        });

        try {
            Message message = new MimeMessage(session);
            //от кого
            message.setFrom(new InternetAddress(username));
            //кому
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail));
            //тема сообщения
            message.setSubject(subject);
            //текст
            message.setText(text);

            //отправляем сообщение
            Transport.send(message);
        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }
    }
}

В строке 21 мы указываем, что будем использовать для отправки протокол SSL.

Шаг 4

Тестируем отправку сообщение оба протоколами:

package com.devcolibri;

public class Main {
    private static com.devcolibri.tls.Sender tlsSender = new com.devcolibri.tls.Sender("<ваш email на gmail>", "<ваш пароль>");
    private static com.devcolibri.ssl.Sender sslSender = new com.devcolibri.ssl.Sender("<ваш email на gmail>", "<ваш пароль>");

    public static void main(String[] args){
        tlsSender.send("This is Subject", "TLS: This is text!", "support@devcolibri.com", "alex@devcolibri.com");
        sslSender.send("This is Subject", "SSL: This is text!", "support@devcolibri.com", "alex@devcolibri.com");
    }
}

В результате вы увидите на посте следующее:

И содержимое этих писем:

ПОХОЖИЕ ПУБЛИКАЦИИ

    None Found

62753
06/06/2013

19 комментариев к статье "Как отправить Email в Java?"

Добавить комментарий

Сайт использует cookie-файлы для того, чтобы вам было удобнее им пользоваться. Для продолжения работы с сайтом, вам необходимо принять использование cookie-файлов.

Я ознакомлен(а)