Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > отправить email из JSP и сервлета


Автор: Altar 2.10.2005, 11:02
Подскажите пожалуйста как это можно сделать кто знает smile

Автор: tux 2.10.2005, 14:18
Из JSP или сервлетов email отправляется точно также, как и из любого другого Java-приложения.

Недавно Stampede для этой цели рекомендовал библиотеку Commons-Email, вот ее и будет проще всего использовать. Скачать можно, например, http://www.sai.msu.su/apache/dist/jakarta/commons/email/binaries/commons-email-1.0.tar.gz. Домашняя страница, включающая документацию, списки рассылки и т.п. находится http://jakarta.apache.org/commons/email/index.html. Использование библиотеки - проще не бывает.

В простейшем случае, если отправляется простой текст, то отправка сообщения выглядит так:
Код

SimpleEmail email = new SimpleEmail();
email.setHostName("pop.mail.ru");
email.addTo("someuser@mail.ru", "Some user");
email.setFrom("altar@mail.ru", "Me");
email.setSubject("Test message");
email.setMsg("This is a simple test of commons-email");
email.send();

Здесь метод setHostName() задает имя SMTP-сервера, addTo() - адресата сообшения, setFrom() - отправителя, setSubject() - тему сообщения, setMsg() - тело сообщения. Или, если необходимо задать имя и пароль пользователя для сервера SMTP, перед отправкой добавится еще один метод:
Код

email.setAuthentication("altar", "some_password");

Работа с вложениями не намного сложнее. Другие примеры использования можно посмотреть http://jakarta.apache.org/commons/email/examples.html.

Внимание! Для работы нужна библиотека http://java.sun.com/products/javamail/, которую для отправки электронной почты можно использовать и саму по себе, только это будет несколько сложнее. Хотя если придется отправлять что-то относительное сложное, так и придется сделать. Скачать JavaMail можно здесь - http://java.sun.com/products/javamail/downloads/index.html.
И если интересно до кучи еще ссылочки по JavaMail: http://www.javaworld.com/javaworld/jw-10-2001/jw-1026-javamail.html, http://java.sun.com/products/javamail/reference/techart/index.html.

Автор: Maksym 10.10.2005, 12:50
Круто tux все рассказал smile
Добавлю только, что на форуме в http://forum.vingrad.ru/index.php?showtopic=53787 и http://forum.vingrad.ru/index.php?showtopic=59614 темах можно найти много работающих примеров с обсуждением (JavaMail)
И вот еще http://java.sun.com/developer/onlineTraining/JavaMail/contents.html, кажется, выше не было.

Автор: Hidrag 27.1.2007, 22:49
tux, а как встроить этот код в jsp страницу, чтобы отправлять мыло, при этом не создавая для обработки сервлет, то есть жму на странице "отправить" и страница отправляет, а не передает данные на сервер сервлету например, или все равно нужно сервлет для обработки написать?

Автор: tux 27.1.2007, 23:07
Цитата(Hidrag @  27.1.2007,  22:49 Найти цитируемый пост)
tux, а как встроить этот код в jsp страницу

А чем JSP принципиально отличается от сервлета? JSP в конечном счете парсится в сервлет и как сервлет и запускается. Пишешь тоже самое в скриплете и все. 

Автор: Hidrag 27.1.2007, 23:12
tux, я понимаю, но когда нажимаю кнопку submit в странице она ведь начнет методом get или post слать данные на сервер и как это обработать я знаю, а вот обойти это как? или же при субмите слать данные в эту же jsp а в ней обработчик сделать...

...а что есть скриплет?  smile 

Автор: tux 28.1.2007, 00:44
Цитата(Hidrag @  27.1.2007,  23:12 Найти цитируемый пост)
tux, я понимаю, но когда нажимаю кнопку submit в странице она ведь начнет методом get или post слать данные на сервер и как это обработать я знаю, а вот обойти это как? или же при субмите слать данные в эту же jsp а в ней обработчик сделать...

А с сервлетами что-то по-другому? Ну поставь в action формы ту же самую JSP если надо. 

Цитата(Hidrag @  27.1.2007,  23:12 Найти цитируемый пост)
...а что есть скриплет?  

Это вот:
Код

<%
SimpleEmail email = new SimpleEmail();
email.setHostName("pop.mail.ru");
email.addTo("someuser@mail.ru", "Some user");
email.setFrom("altar@mail.ru", "Me");
email.setSubject("Test message");
email.setMsg("This is a simple test of commons-email");
email.send();
%>

Автор: Hidrag 29.1.2007, 17:58
Цитата(tux @  28.1.2007,  00:44 Найти цитируемый пост)
Ну поставь в action формы ту же самую JSP если надо. 

хорошо, а как мне обработать в ней пост запрос? если в сервлете я пишу в методе doPost а как в jsp? Есть какой нибудь "перобразователь" сервлета в jsp, чтобы посмотреть? smile

Автор: Greg 30.1.2007, 21:59
Цитата(Hidrag @  27.1.2007,  22:49 Найти цитируемый пост)
tux, а как встроить этот код в jsp страницу, чтобы отправлять мыло, при этом не создавая для обработки сервлет, то есть жму на странице "отправить" и страница отправляет, а не передает данные на сервер сервлету например, или все равно нужно сервлет для обработки написать?

Данные,которые не передаются на сервер для обработки,могут быть обработаны на стороне тонкого клиента (браузера),посредством JavaScript.Попробуйте разместить этот вопрос в топике по JavaScript.

Автор: Foo 31.1.2007, 00:27
Цитата(Hidrag @ 29.1.2007,  17:58)
Цитата(tux @  28.1.2007,  00:44 Найти цитируемый пост)
Ну поставь в action формы ту же самую JSP если надо. 

хорошо, а как мне обработать в ней пост запрос? если в сервлете я пишу в методе doPost а как в jsp? Есть какой нибудь "перобразователь" сервлета в jsp, чтобы посмотреть? smile

я в таких случаях делаю так:

MyJsp.jsp
Код


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'MyJsp.jsp' starting page</title>
    
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>
  
  <body>
  <Form method="post" action="MyJsp.jsp">
    <%
     if (session.getAttribute("sendMail") != null && "true".equals(session.getAttribute("sendMail"))){
         //do something for send mail
             //SimpleEmail email = new SimpleEmail();
                //email.setHostName("pop.mail.ru");
                //email.addTo(request.getParameter("emailAdress"), "Some user");
                //email.setFrom("altar@mail.ru", "Me");
                //email.setSubject("Test message");
                //email.setMsg(request.getParameter("emailAdress"));
                //email.send();
            //etc.
            session.setAttribute("sendMail","false");
            %>
                <a href="MyJsp.jsp">back</a>
            <%
        }else{
     session.setAttribute("sendMail","true");
         %>
             Input email data there
             Adress (for example blababla@bla.bla) <input name="emailAdress"/><br>
             Text of message <input name="emailText"/><br>
                <input type="submit"/>
         <%
     }
    %>
  </Form>
  </body>
</html>



хотя наверняка есть более правильные пути решения этой проблемы...

Автор: Hidrag 1.2.2007, 23:22
Написал в jsp:
Код

                                <form action = SendMail method="POST"> 
                                    <input type="text" name="Adres" value="" />
                                    <br>
                                    <br>
                                    <textarea name="Message" rows="4" cols="20">
                                    </textarea>
                                    <br>
                                    <br>
                                    <input type="submit" value="Send" name="Sendbut" />
                                </form>



вот метод пост сервлета который это обрабатывает
Код

            String adres = request.getParameter("Adres");
            String mess = request.getParameter("Message");

            try {
                SimpleEmail email = new SimpleEmail();
                email.setHostName("pop.mail.ru");
                email.addTo(adres, "Some user");
                email.setFrom("juniorproject@mail.ru", "Me");
                email.setSubject("Test message");
                email.setMsg(mess);
                email.setAuthentication("juniorproject", "parolnedam");
                email.send();
            } catch (EmailException mes) {
                out.println(err.getErrorHTML("Error"+mes.getMessage()));
            }


получаю:
Код

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet execution threw an exception
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)

root cause

java.lang.NoClassDefFoundError: javax/activation/DataSource
    org.apache.commons.mail.Email.buildMimeMessage(Email.java:749)
    org.apache.commons.mail.Email.send(Email.java:897)
    ru.juga.dev.junior.SendMail.doPost(SendMail.java:44)
    ru.juga.dev.junior.SendMail.service(SendMail.java:21)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.

сервер приложений - томкат,  идущий вместе с нетбинсом 5.5
все время был в интернете, и еще 
Код

            } catch (EmailException mes) {
                out.println(err.getErrorHTML("Error"+mes.getMessage()));
            }

сдесь у меня шел мой перехватчик ошибок, но он ничего не словил...

Что не так?

Автор: Hidrag 1.2.2007, 23:52
на всякий случай залил на хостинг
там вот такой эксепшн вывалился:
Код

500 Servlet Exception
java.lang.NoClassDefFoundError: javax/activation/DataSource
    at org.apache.commons.mail.Email.buildMimeMessage(Email.java:749)
    at org.apache.commons.mail.Email.send(Email.java:897)
    at ru.juga.dev.junior.SendMail.doPost(SendMail.java:44)
    at ru.juga.dev.junior.SendMail.service(SendMail.java:21)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:103)
    at com.caucho.server.http.FilterChainServlet.doFilter(FilterChainServlet.java:96)
    at com.caucho.server.http.Invocation.service(Invocation.java:315)
    at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:246)
    at com.caucho.server.http.HttpRequest.handleConnection(HttpRequest.java:163)
    at com.caucho.server.TcpConnection.run(TcpConnection.java:139)
    at java.lang.Thread.run(Thread.java:536)
Resin 2.1.14 (built Thu Jul 1 18:39:55 PDT 2004)

Автор: tux 2.2.2007, 00:47
Для работы JavaMail нужен еще activation.jar.

Автор: Hidrag 2.2.2007, 00:52
в архиве JavaMail не нашел, где можно взять?

Автор: tux 2.2.2007, 01:32
http://java.sun.com/products/javabeans/jaf/index.jsp

Автор: Hidrag 24.2.2007, 21:35
А как отправить письмо с вложением? Конкретно, нужно отправлять html'ник...

Автор: Hidrag 24.2.2007, 21:56
Прошу прощения, нашел: все оказалось тут: http://jakarta.apache.org/commons/email/userguide.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)