В данной статье мы рассмотрим механизм отправки 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
В результате мы получим следующую страницу:
Если всё было сделано верно, то на почту получателя придёт email.
На этом мы заканчиваем изучение отправки email с помощью сервлетов и пакета javax.mail.
Также, мы завершаем изучение сервлетов в целом.