Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
 
Agent
0 / 0 / 2
Регистрация: 08.07.2014
Сообщений: 37
#1

MailServlet

14.10.2014, 23:32. Просмотров 424. Ответов 1
Метки нет (Все метки)

Сегодня на паре сделали сервлет для отправки электронного письма со своего ящика. Не могу понять, из-за чего кидает эксепшн? Вроде все нужные библиотеки подключил: mail.jar из java mail api и activation.jar из JAF. Эти либы кинул закинул к либам tomcat. Сервер: Tomcat 8.0.126.

Файл send.jsp лежит в каталоге web/jsp

HTML5
1
2
3
4
5
6
7
8
9
10
11
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Send Result</title>
    </head>
 
    <body>
        <p>Sending in progress...</p>
        <a href="index.jsp">Return to new mail page</a>
    </body>
</html>
Файл index.jsp:

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<%@ page language="java" contentType= "text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
    <head>
        <title>JavaMail</title>
    </head>
 
    <body>
        <form action="/mailservlet" method="POST">
 
            <table>
                <tr>
                    <td>Send to:</td>
                    <td>
                        <input type="text"name="to"/>
                    </td>
                </tr>
 
                <tr>
                    <td>Subject:</td>
                    <td>
                        <input type="text"name="subject"/>
                    </td>
                </tr>
            </table>
 
            <hr/>
 
            <textarea type="text"name="body"rows="5"cols="45">
                Message text
            </textarea>
 
            <br/><br/>
 
            <input type="submit"value="Send message!"/>
        </form>
    </body>
</html>
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
           version="3.0">
 
    <servlet>
        <servlet-name>MailServlet</servlet-name>
        <servlet-class>by.bsu.mail.controller.MailServlet</servlet-class>
    </servlet>
    <context-param>
        <param-name>mail</param-name>
        <param-value>/WEB-INF/classes/config/mail.properties</param-value>
    </context-param>
 
</web-app>
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package by.bsu.mail.action;
 
import by.bsu.mail.creator.SessionCreator;
 
import  java.util.Properties;
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;
 
public class MailThread extends Thread {
    private MimeMessage message;
    private String sendToEmail;
    private String mailSubject;
    private String mailText;
    private Properties properties;
 
    public MailThread(String sendToEmail,    String mailSubject, String mailText, Properties properties) {
        this.sendToEmail = sendToEmail;
        this.mailSubject = mailSubject;
        this.mailText = mailText;
        this.properties = properties;
    }
 
    private void init() {
// объект почтовой сессии
        Session mailSession = (new SessionCreator(properties)).createSession();
        mailSession.setDebug(true);
// создание объекта почтового сообщения
        message = new MimeMessage(mailSession);
        try{
// загрузка параметров в объект почтового сообщения
            message.setSubject(mailSubject);
            message.setContent(mailText, "text/html");
 
            message.setRecipient(Message.RecipientType.TO,
                    new InternetAddress(sendToEmail));
        } catch(AddressException e) {
            System.err.print("Некорректный адрес:" + sendToEmail + " " + e);
// in log file
        } catch(MessagingException e) {
            System.err.print("Ошибка формирования сообщения" + e);
// in log file
        }
    }
 
    public void run() {
        init();
        try{
// отправка почтового сообщения
            Transport.send(message);
        } catch(MessagingException e) {
            System.err.print("Ошибка при отправлении сообщения" + e);
// in log file
        }
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package by.bsu.mail.controller;
 
import by.bsu.mail.action.MailThread;
 
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Properties;
 
@WebServlet(
        urlPatterns = { "/mailservlet" },
        initParams = {
                @WebInitParam(name = "mail.smtp.host", value = "smtp.gmail.com"),
                @WebInitParam(name = "mail.smtp.port", value = "465"),
                @WebInitParam(name = "smtp.auth.user", value = "mymail@gmail.com"),
                @WebInitParam(name = "smtp.auth.pass", value = "myPassword"),
                @WebInitParam(name = "mail.transport.protocol", value = "smtp")
        })
 
public class MailServlet extends HttpServlet {
    @Override
    protected void doPost (HttpServletRequest request,
                           HttpServletResponse response) throws ServletException, IOException {
        ServletConfig sc = this.getServletConfig();
        Enumeration e =sc.getInitParameterNames();
        Properties prop = new Properties();
        while(e.hasMoreElements()) {
            String name = (String) e.nextElement();
            String value = sc.getInitParameter(name);
            prop.setProperty(name, value);
        }
        MailThread mailOperator =
                new MailThread(request.getParameter("to"),     request.getParameter("subject"),     request.getParameter("body"),     prop);
// запуск процесса отправки письма в отдельном потоке
        mailOperator.start();
// переход на страницу с предложением о создании нового письма
        request.getRequestDispatcher("/jsp/send.jsp").forward(request, response);
    }
 
 
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package by.bsu.mail.creator;
 
import java.util.Properties;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
public class SessionCreator {
    private String smtpHost;
    private String smtpPort;
    private String userName;
    private String userPassword;
    private Properties sessionProperties;
 
    public SessionCreator(Properties configProperties) {
        smtpHost = configProperties.getProperty("mail.smtp.host");
        smtpPort = configProperties.getProperty("mail.smtp.port");
        userName = configProperties.getProperty("smtp.auth.user");
        userPassword = configProperties.getProperty("smpt.auth.pass");
        // загрузка параметров почтового сервера в свойства почтовой сессииl
        sessionProperties = new Properties();
        sessionProperties.setProperty("mail.transport.protocol", "smtp");
        sessionProperties.setProperty("mail.host", smtpHost);
        sessionProperties.put("mail.smtp.auth", "true");
        sessionProperties.put("mail.smtp.port", smtpPort);
        sessionProperties.put("mail.smtp.socketFactory.port", smtpPort);
        sessionProperties.put("mail.smtp.socketFactory.class",
                "javax.net.ssl.SSLSocketFactory");
        sessionProperties.put("mail.smtp.socketFactory.fallback", "false");
        sessionProperties.setProperty("mail.smtp.quitwait", "false");
    }
    public Session createSession() {
        return Session.getDefaultInstance(sessionProperties,
                new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(userName, userPassword);
                    }
                });
    }
}
Добавлено через 17 минут
ЧТО-ТО ПРОЯСНЯЕТСЯ!!! Оказалось, что на паре из доп. библиотек мы использовали только javax.mail.jar Отправка письма у меня идет, но дальше ничего, хотя должно высвечиваться сообщение об удачной отправке. Помогите, пожалуйста.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Shpota
12 / 12 / 4
Регистрация: 17.12.2012
Сообщений: 71
15.10.2014, 12:37 #2
Цитата Сообщение от Agent Посмотреть сообщение
Не могу понять, из-за чего кидает эксепшн?
Мы тоже не можем, стек в студию.

Пробовали отправлять письмо с консольного приложения? Напишите тестовый класс, добейтесь работоспособности и лишь потом пробуйте это все реализовать с помощью сервлета. Так вы по максимуму исключите возможные проблемы.

Ну и конечно, тут даже гуглить не надо, вчера ваш однокурсник тут же задавал тот же вопрос. Мне остается только сделать ТЫЦ
0
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru