Как отправить электронное письмо от jsp / servlet?

Как отправить электронное письмо от JSP / сервлета? Нужно ли загружать некоторые баночки или отправлять электронную почту с помощью JSP / сервлетов без каких-либо банок?

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

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


  2. Создайте простой Java-class ванили, который использует JavaMail API для отправки почтового сообщения. API JavaMail поставляется с отличным учебным пособием и часто задаваемыми вопросами . Назовите class Mailer и дайте ему метод send() (или что хотите). Протестируйте его с помощью некоторого classа тестера с помощью метода 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 = "[email protected]"; String to = "[email protected]"; String subject = "Interesting news"; String message = "I've got JavaMail to work!"; mailer.send(from, to, subject, message); } } 

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


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

     

    Your email address:

    Mail subject:

    Mail message:

    ${message}

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


  4. Теперь создайте class Servlet, который прослушивает 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 = "[email protected]"; } 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); } } } 

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

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

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

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

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

  smtp_server smtp.blabla.com 

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

 // 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); 

Страница JSP:

 
To Email-id :

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

 String uri=req.getRequestURI(); if(uri.equals("/mail.do")) { SendEmail sa=new SendEmail(); String to_mail=request.getParameter("email"); String body="
Hi this is Test mail
"; sa.SendingEmail(to_email,body); }

И class 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(); } } 

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

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

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

получить activ.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"%>     Send email   

Send email using SMTP

Sender address
Recipient address
Subject
Message Text

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

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

   email utility   <%@ 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( "[email protected]", "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 + "."); %>    

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

HTTP: // локальный: 8080 / имя_проект / emailForm.jsp

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

  • Окончательная версия Java-версии (J2EE, Java EE, Servlet, JSP, JSTL)
  • Лучший вариант для управления сеансами в Java
  • Обмен данными сеанса между контекстами в Tomcat
  • Доступ к пост-переменным с использованием сервлетов Java
  • Как передавать данные из JSP в сервлет при отправке HTML-формы
  • Вызов сервлета из JSP-файла при загрузке страницы
  • Поиск захвата HttpServletResponseWrapper
  • Предотrotation множественного входа с использованием одного и того же имени пользователя и пароля
  • Как получить доступ к атрибуту запроса, установленному сервлетом в JSP?
  • Можно ли отключить jsessionid в сервлете tomcat?
  • Могу ли я обслуживать JSP из JAR в lib, или есть обходной путь?
  • Давайте будем гением компьютера.