Как отправить электронное письмо от jsp / servlet?
Как отправить электронное письмо от JSP / сервлета? Нужно ли загружать некоторые баночки или отправлять электронную почту с помощью JSP / сервлетов без каких-либо банок?
-
Каким будет мой Java-код?
-
Как выглядит мой HTML-код (если есть)?
- почему бизнес-логика должна быть перенесена из JSP?
- Как вы возвращаете объект JSON из Java-сервлета
- java.lang.IllegalArgumentException: указанный основной набор ресурсов недействителен
- Браузер не может получать / находить относительные ресурсы, такие как CSS, изображения и ссылки при вызове сервлета, который пересылает JSP
- HttpServletResponse sendRedirect постоянный
-
Нужны ли несколько classов или вы можете использовать только один class?
- как получить MAC-адрес клиента от HttpServlet?
- Получить ServletContext в ресурсе JAX-RS
- Сервлет и фильтр
- Что такое WEB-INF, используемый в веб-приложении Java EE?
- Как я могу прочитать выходной stream HttpServletReponses?
- Как узнать, был ли запрос на сервлет выполнен с использованием HTTP или HTTPS?
- ServletRequest.getParameterMap () возвращает Map и ServletRequest.getParameter () возвращает String?
- Как правильно выйти из веб-приложения Java EE 6 после входа в систему
Логика почтовой программы должна идти в своем собственном автономном classе, который можно использовать везде. Файл JSP должен содержать только логику представления и разметку. Класс Servlet должен просто обработать запрос соответствующим образом и вызвать class почтовой программы. Вот шаги, которые вам нужно предпринять:
-
Сначала решите, какой SMTP-сервер вы хотите использовать, чтобы вы могли отправлять электронные письма. Один из ваших интернет-провайдеров? Один из Gmail? Yahoo? Хостинг-провайдер? Самостоятельный? Независимо от этого, укажите имя хоста, порт, имя пользователя и пароль этого SMTP-сервера. Вам понадобится эта информация.
-
Создайте простой 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, с которым вы можете отправить такую почту.
-
Теперь часть JSP, не совсем понятно, почему вы упомянули JSP, но поскольку JSP должен представлять только HTML, я уверен, вы хотели бы иметь что-то вроде формы контакта в JSP. Вот пример запуска:
Да, простой простой, просто разметка / стиль, как бы вы ни хотели.
-
Теперь создайте 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. Вот ссылка, которая поможет вам в этом:
Я использую пакет 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:
Вот код сервлета:
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
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. Перезагрузите сервер, если он дает ошибку сервера.