Руководство по Servlets. Отправка email.

В данной статье мы рассмотрим механизм отправки email сообщений с помощью сервлетов.

При разработке веб-приложений мы сталкиваемся с необходимостью отправлять email сообщения (регистрация, восстановления пароля, рассылка и т.д.).

Для этих целей мы можем воспользоваться сервлетами и средствами пакета javax.mail.

Для понимания того, как это работает на практике, рассмотрим простой пример.
В качестве основы возьмём приложение из данной статьи.

!!! Не забудьте вставить ваши данные – email, пароль, email получателя !!!

Класс SendEmailDemo.java


package net.proselyte.servletstutorial;

import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.mail.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Properties;

/**
 * This is simple servlet that demonstrates sending email using package javax.mail.*
 *
 * @author Eugene Suleimanov
 */

public class SendEmailDemo extends HttpServlet {

    static final String SENDER_EMAIL_ADDRESS = "ENTER YOUR EMAIL";
    static final String SENDER_EMAIL_PASSWORD = "ENTER YOUR PASSWORD";
    static final String SENDER_HOST = "smtp.gmail.com";
    static final String SENDER_PORT = "587";
    static final String RECEIVER_EMAIL_ADDRESS = "ENTER RECEIVER EMAIL";

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        Properties properties = new Properties();
        properties.put("mail.smtp.host", SENDER_HOST);
        properties.put("mail.smtp.port", SENDER_PORT);
        properties.put("mail.from", SENDER_EMAIL_ADDRESS);
        properties.put("mail.smtp.password", SENDER_EMAIL_PASSWORD);
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.starttls.enable", "true");

        Session session = Session.getInstance(properties,
                new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(SENDER_EMAIL_ADDRESS, SENDER_EMAIL_PASSWORD);
                    }
                });

        response.setContentType("text/html");

        String docType = "<!DOCTYPE html>";
        String title = "Send Email Demo";

        PrintWriter writer = response.getWriter();

        try {
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(SENDER_EMAIL_ADDRESS));
            message.addRecipient(Message.RecipientType.TO,
                    new InternetAddress(RECEIVER_EMAIL_ADDRESS));
            message.setSubject("Proselyte Servlets Tutorial");
            message.setText("Send Email Demo");
            Transport.send(message);
            String sendEmailResultMessage = "Email is successfully sent!";
            writer.println(docType + "<html>" +
                    "<head>" +
                    "<title>" + title + "</title>" +
                    "</head>" +
                    "<body>" +
                    "<h1>" + sendEmailResultMessage + "</h1>" +
                    "</body>" +
                    "</html>");


        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

Файл web.xml


<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>Servlets Tutorial</display-name>

    <servlet>
        <servlet-name>SimpleServlet</servlet-name>
        <servlet-class>net.proselyte.servletstutorial.SimpleServlet</servlet-class>
    </servlet>

    <servlet>
        <servlet-name>SendEmailDemo</servlet-name>
        <servlet-class>net.proselyte.servletstutorial.SendEmailDemo</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>SimpleServlet</servlet-name>
        <url-pattern>/SimpleServlet</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>SendEmailDemo</servlet-name>
        <url-pattern>/SendEmailDemo</url-pattern>
    </servlet-mapping>
</web-app>

Файл pom.xml


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>net.proselyte.tutorials</groupId>
    <artifactId>ServletsTutorial</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>Servlets Tutorial</name>
    <url>http://maven.apache.org</url>

    <properties>
        <javax.servlet.api.version>2.5</javax.servlet.api.version>
        <javax.mail.version>1.4</javax.mail.version>
        <tomcat.plugin.version>2.2</tomcat.plugin.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>${javax.servlet.api.version}</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>${javax.mail.version}</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>ServletsTutorial</finalName>

        <plugins>
            <!-- Tomcat plugin -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>${tomcat.plugin.version}</version>
                <configuration>
                    <path>/</path>
                    <port>8088</port>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Выполним в консоли команду:


mvn tomcat7:run

Откроем браузер и перейдём по ссылке:


http://localhost:8088/SendEmailDemo

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

servletsTutorialSendingEmailDemo

Если всё было сделано верно, то на почту получателя придёт email.

На этом мы заканчиваем изучение отправки email с помощью сервлетов и пакета javax.mail.

Также, мы завершаем изучение сервлетов в целом.