Как отправить письмо из jsp / servlet? - PullRequest
8 голосов
/ 21 сентября 2010

Как отправить электронное письмо из JSP / сервлет? Нужно ли загружать несколько jar-файлов или вы можете отправить письмо из JSP / servlets без jar-файлов?

  • Как будет выглядеть мой Java-код?

  • Как будет выглядеть мой HTML-код (если есть)?

  • Нужно ли несколько классов или вы можете использовать только один класс?

Ответы [ 5 ]

23 голосов
/ 21 сентября 2010

Логика почтовой программы должна идти в своем собственном автономном классе, который вы можете использовать везде.Файл JSP должен содержать только логику представления и разметку.Класс Servlet должен просто обработать запрос соответствующим образом и вызвать класс почтовой программы.Вот шаги, которые вам нужно предпринять:

  1. Сначала определите, какой SMTP-сервер вы хотите использовать, чтобы иметь возможность отправлять электронные письма.Один из вашего провайдера?Тот из Gmail?Yahoo?Провайдер хостинга сайтов?Самостоятельный?Независимо от этого, укажите имя хоста, порт, имя пользователя и пароль этого SMTP-сервера.Вам понадобится эта информация.


  2. Создайте простой класс Java, который использует JavaMail API для отправки почтового сообщения.JavaMail API поставляется с отличным учебником и FAQ .Назовите класс Mailer и присвойте ему метод send() (или как вы хотите).Протестируйте его, используя некоторый класс тестера, с помощью метода main(), например:

    public class TestMail {
        public static void main(String... args) throws Exception {
            // Create mailer.
            String hostname = "smtp.example.com";
            int port = 2525;
            String username = "nobody";
            String password = "idonttellyou";
            Mailer mailer = new Mailer(hostname, port, username, password);
    
            // Send mail.
            String from = "john.doe@example.com";
            String to = "jane.doe@example.com";
            String subject = "Interesting news";
            String message = "I've got JavaMail to work!";
            mailer.send(from, to, subject, message);
        }
    }
    

    . Вы можете сделать его настолько простым или сложным, насколько захотите.Это не имеет значения, если у вас есть класс, с помощью которого вы можете отправлять такие письма.


  3. Теперь в части JSP не совсем понятно, почему вы упомянулиJSP, но поскольку JSP должен представлять только HTML, я уверен, что вы хотели бы иметь что-то вроде контактной формы в JSP.Вот пример запуска:

    <form action="contact" method="post">
        <p>Your email address: <input name="email"></p>
        <p>Mail subject: <input name="subject"></p>
        <p>Mail message: <textarea name="message"></textarea></p>
        <p><input type="submit"><span class="message">${message}</span></p>
    </form>
    

    Да, просто, просто разметьте / стилируйте его так, как вы хотите.


  4. Теперь создайте класс сервлетакоторый прослушивает url-pattern из /contact (так же, как отправляет форму) и реализует метод doPost() (тот же метод, что и форма) следующим образом:

    public class ContactServlet extends HttpServlet {
        private Mailer mailer;
        private String to;
    
        public void init() {
            // Create mailer. You could eventually obtain the settings as
            // web.xml init parameters or from some properties file.
            String hostname = "smtp.example.com";
            int port = 2525;
            String username = "nobody";
            String password = "forgetit";
            this.mailer = new Mailer(hostname, port, username, password);
            this.to = "you@example.com";
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String email = request.getParameter("email");
            String subject = request.getParameter("subject");
            String message = request.getParameter("message");
            // Do some validations and then send mail:
    
            try {
                mailer.send(email, to, subject, message);
                request.setAttribute("message", "Mail succesfully sent!");
                request.getRequestDispatcher("/WEB-INF/contact.jsp").forward(request, response);
            } catch (MailException e) {
                throw new ServletException("Mailer failed", e);
            }
        }
    }
    

    Вот и все.Держите это простым и чистым.Каждая вещь имеет свои четкие обязанности.

4 голосов
/ 21 сентября 2010

Вы можете отправлять почту из jsp или сервлета, как мы отправляем из файла класса, используя java mail api. Вот ссылка, которая поможет вам в этом:

http://www.java -samples.com / showtutorial.php? Tutorialid = 675

2 голосов
/ 21 сентября 2010

Я использую пакет javamail, и он работает очень хорошо.Приведенные выше примеры хороши, но, как я вижу, они не определяют параметры во внешнем файле (например, web.xml), что рекомендуется ...

Представьте, что вы хотите изменить свой адрес электронной почты или SMTPхост .. Гораздо проще редактировать файл web.xml, чем 10 сервлетов, в которых вы использовали функцию mail.Например, добавьте следующие строки в web.xml

<context-param>
<param-name>smtp_server</param-name>
<param-value>smtp.blabla.com</param-value></context-param>

Затем вы можете получить доступ к этим параметрам из сервлета с помощью

// 1 - init
    Properties props = new Properties();
    //props.put("mail.transport.protocol", "smtp");
    props.put("mail.smtp.host", smtp_server);
    props.put("mail.smtp.port", smtp_port); 
1 голос
/ 20 декабря 2013

JSP-страница:

<form action="mail.do" method="POST">
<table>
    <tr>
    <td>To Email-id :<input type="text" name="email" /></td> <!--enter the email whom to send mail --> 
    <td><input type="submit" value="send"></input></td>
    </tr>
</table>
</form>

Вот код сервлета:

String uri=req.getRequestURI();

if(uri.equals("/mail.do"))
        {
            SendEmail sa=new SendEmail();
                        String to_mail=request.getParameter("email");
                        String body="<html><body><table width=100%><tr><td>Hi this is Test mail</td></tr></table></body></html>";
            sa.SendingEmail(to_email,body);

        }

И класс SendEmail:

 package Email;

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 SendEmail {

    public void SendingEmail(String Email,String Body) throws AddressException, MessagingException
    {

             String host ="smtp.gmail.com";
             String from ="yourMailId";  //Your mail id
             String pass ="yourPassword";   // Your Password
             Properties props = System.getProperties();
             props.put("mail.smtp.starttls.enable", "true"); // added this line
             props.put("mail.smtp.host", host);
             props.put("mail.smtp.user", from);
             props.put("mail.smtp.password", pass);
             props.put("mail.smtp.port", "25");
             props.put("mail.smtp.auth", "true");
             String[] to = {Email}; // To Email address
             Session session = Session.getDefaultInstance(props, null);
             MimeMessage message = new MimeMessage(session);
             message.setFrom(new InternetAddress(from));
             InternetAddress[] toAddress = new InternetAddress[to.length];        
             // To get the array of addresses
              for( int i=0; i < to.length; i++ )
              { // changed from a while loop
                  toAddress[i] = new InternetAddress(to[i]);
              }
             System.out.println(Message.RecipientType.TO);
             for( int j=0; j < toAddress.length; j++)
             { // changed from a while loop
             message.addRecipient(Message.RecipientType.TO, toAddress[j]);
             }
             message.setSubject("Email from SciArchives");

             message.setContent(Body,"text/html");
             Transport transport = session.getTransport("smtp");
             transport.connect(host, from, pass);
             transport.sendMessage(message, message.getAllRecipients());
                 transport.close();
        }
    }
0 голосов
/ 27 июня 2016

Эта базовая настройка работала нормально:

Импорт mail.jar и активации.jar в папку WEB_INF / lib внутри проекта.

get mail.jar от JavaMail (последняя версия с официального сайта) .

получить активации.jar с http://www.oracle.com/technetwork/java/javase/jaf-136260.html

1. Первый jsp: emailForm.jsp

Это форма, используемая для передачи информации об отправителе, деталях получателя, теме и сообщении в emailUtility

     <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Send email</title>
    </head>
    <body>
        <form action="emailUtility.jsp" method="post">
            <table border="0" width="35%" align="center">
                <caption><h2>Send email using SMTP</h2></caption>
                <tr>
                    <td width="50%">Sender address </td>
                    <td><input type="text" name="from" size="50"/></td>
                </tr>
                <tr>
                    <td width="50%">Recipient address </td>
                    <td><input type="text" name="to" size="50"/></td>
                </tr>
                <tr>
                    <td>Subject </td>
                    <td><input type="text" name="subject" size="50"/></td>
                </tr>
                <tr>
                    <td>Message Text </td>
                    <td><input type="text" name="messageText"></td>
                </tr>
                <tr>
                    <td colspan="2" align="center"><input type="submit" value="Send"/></td>
                </tr>
            </table>

        </form>
    </body>
    </html>

2. Второй jsp: emailUtility.jsp

Это действие формы, упомянутое в предыдущем jsp (emailForm.jsp).

<html>
<head>
<title>email utility</title>
</head>
<body>
<%@ page import="java.util.*" %>
<%@ page import="javax.mail.*" %>
<%@ page import="javax.mail.internet.*" %>
<%@ page import="javax.activation.*" %>
<%
String host = "smtp.gmail.com";
String to = request.getParameter("to");    

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

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

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

boolean sessionDebug = false;
// Create some properties and get the default Session.
Properties props = System.getProperties();
props.put("mail.host", host);
props.put("mail.transport.protocol", "smtp");
props.setProperty("mail.transport.protocol", "smtp");     
props.setProperty("mail.host", "smtp.gmail.com");  
props.put("mail.smtp.auth", "true");  
props.put("mail.smtp.port", "465");  
props.put("mail.debug", "true");  
props.put("mail.smtp.socketFactory.port", "465");  
props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");  
props.put("mail.smtp.socketFactory.fallback", "false"); 

 Session mailSession = Session.getDefaultInstance(props, 
    new javax.mail.Authenticator(){
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(
            "youremail@gmail.com", "password_here");// Specify the Username and the PassWord
        }
  });
 // Set debug on the Session
 // Passing false will not echo debug info, and passing True will.

 mailSession.setDebug(sessionDebug);

// Instantiate a new MimeMessage and fill it with the
// required information.

Message msg = new MimeMessage(mailSession);
msg.setFrom(new InternetAddress(from));
InternetAddress[] address = {new InternetAddress(to)};
msg.setRecipients(Message.RecipientType.TO, address);
msg.setSubject(subject);
msg.setSentDate(new Date());
msg.setText(messageText);

// Hand the message to the default transport service
// for delivery.
Transport.send(msg);
out.println("Mail was sent to " + to);
out.println(" from " + from);
out.println(" using host " + host + ".");
%>
</table>
</body>
</html>

3. Перейти по следующему адресу

http://localhost:8080/projectname/emailForm.jsp

4. Перезапустите сервер, если он выдаст ошибку сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...