¿Cómo enviar un correo electrónico desde jsp / servlet?

¿Cómo enviar un correo electrónico desde JSP / servlet? ¿Es necesario descargar algunos tarros o puede enviar un correo electrónico desde JSP / servlets sin tarros?

  • ¿Cómo se vería mi código Java?

  • ¿Cómo se vería mi código HTML (si corresponde)?

  • ¿Son necesarias múltiples clases o puede usar solo una clase?

La lógica del correo debe ir en su propia clase independiente que puede reutilizar en cualquier lugar. El archivo JSP solo debe contener lógica de presentación y marcado. La clase Servlet solo debe procesar la solicitud de la forma adecuada y llamar a la clase de correo. Estos son los pasos que debe seguir:

  1. Primero decida qué servidor SMTP desea usar para poder enviar correos electrónicos. ¿El de tu ISP? ¿El de Gmail? Yahoo? Proveedor de alojamiento web? ¿Uno autosuficiente? De todos modos, calcule el nombre de host, el puerto, el nombre de usuario y la contraseña de este servidor SMTP. Necesitarás esta información.


  2. Cree una clase simple de Java que use JavaMail API para enviar un mensaje de correo. La API de JavaMail viene con un excelente tutorial y preguntas frecuentes . Denomine a la clase Mailer y proporciónele un método send() (o lo que quiera). Pruébalo usando alguna clase de prueba con un método main() como este:

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

    Puede hacerlo tan simple o avanzado como desee. No importa, siempre y cuando tenga una clase con la que pueda enviar un correo como ese.


  3. Ahora, la parte JSP, no está del todo claro por qué mencionaste JSP, pero como se supone que JSP representa solo HTML, apuesto a que te gustaría tener algo así como un formulario de contacto en un JSP. Aquí hay un ejemplo de inicio:

     

    Your email address:

    Mail subject:

    Mail message:

    ${message}

    Sí, simple, solo marque / estilice de la forma que desee.


  4. Ahora, cree una clase Servlet que escuche en un url-pattern de /contact (el mismo al que se envía el formulario) e implemente el método doPost() (el mismo método que el formulario está usando) de la siguiente manera:

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

    Eso es. Mantenlo simple y limpio. Cada cosa tiene sus propias responsabilidades claras.

Puede enviar correo desde jsp o servlet como lo enviamos desde el archivo de clase usando java mail api. Aquí hay un enlace que te ayudará para eso:

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

Estoy usando el paquete javamail y funciona muy bien. Las muestras que se muestran arriba son buenas, pero como puedo ver, no definieron parámetros en un archivo externo (por ejemplo, web.xml) que se recomienda …

Imagine que desea cambiar su dirección de correo electrónico o su host SMTP. Es mucho más fácil editar el archivo web.xml que 10 servlets donde utilizó la función de correo. Por ejemplo, agregue las siguientes líneas en web.xml

  smtp_server smtp.blabla.com 

Luego puede acceder a esos parámetros desde servlet con

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

Página JSP:

 
To Email-id :

Aquí está el código de Servlet:

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

Y la clase 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(); } } 

Esta configuración básica funcionó bien:

Importe mail.jar y activation.jar a la carpeta WEB_INF / lib dentro del proyecto.

obtener mail.jar de JavaMail (la última versión del sitio oficial) .

obtener activation.jar de http://www.oracle.com/technetwork/java/javase/jaf-136260.html

1. Primero jsp: emailForm.jsp

Este es un formulario utilizado para pasar el remitente, los detalles del destinatario, el contenido del asunto y el mensaje a la aplicación de correo electrónico.

  <%@ 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. Segundo jsp: emailUtility.jsp

Esta es la acción de formulario mencionada en el jsp anterior (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( "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 + "."); %>    

3. Vaya a la siguiente URL

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

4. Reinicie el servidor si le da error al servidor.