Электронная почта и сервелеты

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

Следующий пример использует интерфейсы API JavaMail для работы с электронной почтой в сервлетах и JSP. API JavaMail содержит классы, с помощью которых моделируется система электронной почты. Класс javax.mail.Session представляет сеанс почтовой связи, класс javax.mail.Message – почтовое сообщение, класс javax.mail.internet.InternetAddress – адреса электронной почты.

clip_image002

Рис. 18.5. Формирование запроса на отправку письма

Для работы с данной частью платформы J2EE необходимо скачать zip-файлы, расположенные по адресу http://java.sun.com/products/javamail/, содержащие архивы mail.jar и activation.jar. И добавить эти файлы в каталог jar-файлов серверам приложений (common/lib для Tomcat). Также необходимо запустить почтовую программу James, являющуюся также одним из проектов apache.org.

Ниже приведена страница JSP, содержащая форму для заполнения основных полей: «Кому» – «to», «От кого» – «from», «Тема сообщения» – «subj»

<!– пример # 7 : страница создания электронного письма : index.jsp–>

<%@ page language="java" contentType=

"text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<html><head><title>SendMail Application</title></head>

<b>Мой почтовый сервер</b>

<form method="post" action="sendmail">

<table>

<tr><td><b>To(email):</b></td><td>

<input name="to" type="text" size=40></td></tr>

<tr><td><b>From(email):</b></td><td>

<input name="from" type="text" size=40></td></tr>

<tr><td><b>Subject:</b></td><td>

<input name="subj" type="text" size=40></td></tr>

</table>

<hr>

<textarea name="body" type="text" rows=5 cols=45>

Добрый день!</textarea>

<br>

<input type="submit" value="Отправить!">

</form>

</body></html>

Параллельные процессы по отправке письма и предложению пользователю в это же самое время создать новое письмо организуются с применением потока
в следующем сервлете.

/* пример # 8 : доступ к синхронизированным ресурсам :

SendMailServlet.java */

package chapt18;

import javax.mail.Message;

import javax.mail.MessagingException;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.AddressException;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

import javax.activation.*;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

import java.io.PrintWriter;

public class SendMailServlet

extends javax.servlet.http.HttpServlet

implements javax.servlet.Servlet {

//объект почтовой сессии

private Session mailSession = null;

public void init(ServletConfig config)

throws ServletException {

//mailSession = Session.getDefaultInstance(System.getProperties());

final String host = "mail.smtphost";

final String port = "mail.smtpport";

//запрос параметров почтового сервера из web.xml

String hostvalue = config.getInitParameter(host);

String portvalue = config.getInitParameter(port);

java.util.Properties props = new java.util.Properties();

//загрузка параметров почтового сервера в объект свойств

props.put(host, hostvalue);

props.put(port, portvalue);

//загрузка параметров почтового сервера в объект почтовой сессии

mailSession = Session.getDefaultInstance(props, null);

}

protected void doPost(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

//извлечение параметров письма из запроса

String from = request.getParameter("from");

String to = request.getParameter("to");

String subject = request.getParameter("subj");

String content = request.getParameter("body");

if((from == null) || (to == null)

|| (subject == null) || (content == null)) {

/*при отсутствии одного из параметров предлагается повторить

ввод*/

response.sendRedirect("index.jsp");

return;

}

//запуск процесса отправки почты в отдельном потоке

(new MailSender(to, from, subject, content)).start();

//формирование страницы с предложение о создании нового письма

response.setContentType("text/html; charset=CP1251");

PrintWriter out = response.getWriter();

out.println("<html><head><title>");

out.println("SendMail Application</title></head>");

out.println("Message to <b>" + to

+ "</b> sending in progress");

out.println("<a href = \"index.jsp\">New message</a>");

out.println("</body></html>");

}

private class MailSender extends Thread {

private String mailTo;

private String mailFrom;

private String mailSubject;

private String mailContent;

MailSender(String mailTo, String mailFrom,

String mailSubject, String mailContent) {

setDaemon(true);

this.mailTo = mailTo;

this.mailFrom = mailFrom;

this.mailSubject = mailSubject;

this.mailContent = mailContent;

}

public void run() {

try {

//создание объекта почтового сообщения

Message message = new MimeMessage(mailSession);

//загрузка параметров в объект почтового сообщения

message.setFrom(new InternetAddress(mailFrom));

message.setRecipient(Message.RecipientType.TO,

new InternetAddress(mailTo));

message.setSubject(mailSubject);

message.setContent(mailContent, "text/plain");

//отправка почтового сообщения

Transport.send(message);

} catch(AddressException e) {

e.printStackTrace();

System.err.print("Ошибка адреса");

} catch(MessagingException e) {

e.printStackTrace();

System.out.print("Ошибка сообщения");

}

}

}

}

В результате в браузер будет выведено:

Message to blinov@gmail.com sending in progress New message

где New message представляет собой активную ссылку, перенаправляющую при запуске на index.jsp для создания еще одного письма. Процесс же отправки письма будет функционировать независимо от дальнейшей работы приложения.

Файл web.xml для данного приложения имеет вид:

<?xml version="1.0" encoding="UTF-8"?>

<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<display-name>FirstMail</display-name>

<servlet>

<display-name>

SendMailServlet</display-name>

<servlet-name>SendMailServlet</servlet-name>

<servlet-class>

SendMailServlet</servlet-class>

<init-param>

<param-name>mail.smtphost</param-name>

<param-value>mail.bsu.bsu</param-value>

</init-param>

<init-param>

<param-name>mail.smtpport</param-name>

<param-value>25</param-value>

</init-param>

</servlet>

<servlet-mapping>

<servlet-name>chapt18.SendMailServlet</servlet-name>

<url-pattern>/sendmail</url-pattern>

</servlet-mapping>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

</web-app>

В качестве значения параметра mail.smtphost можно попробовать использовать адрес почтового сервера mail.attbi.com.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

1 комментарий »

 
  • Stroitemm2 says:

    Привет! Изготовление и монтаж навесов из поликарбоната в Ростове-на-Дону. У нас создана своя строительная система. Поэтому мы выигрываем в качестве. У нас так же есть прямые поставки, за счёт этого мы выигрываем в цене. Заказывайте у нас и вы не пожалеете о своей выборе. Звоните прямо сейчас и вам ответят на все интересующие вас вопросы: 8-919-88-55-88-3.

 

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100