Come inviare una e-mail da jsp / servlet?

Come inviare una e-mail da JSP / servlet? È necessario scaricare alcuni vasi o è ansible inviare una e-mail da JSP / servlet senza barattoli?

La logica del mailer dovrebbe andare nella sua class autonoma che puoi riutilizzare ovunque. Il file JSP dovrebbe contenere solo la logica di presentazione e il markup. La class Servlet dovrebbe solo elaborare la richiesta nel modo appropriato e chiamare la class mailer. Ecco i passaggi che devi seguire:

  1. Per prima cosa decidi quale server SMTP desideri utilizzare in modo da poter inviare e-mail. Quello del tuo ISP? Quello di Gmail? Yahoo? Fornitore di servizi di hosting Un auto-mantenuto? Indipendentemente da ciò, figura il nome host, la porta, il nome utente e la password di questo server SMTP. Avrai bisogno di queste informazioni.


  2. Crea una semplice class Java vanilla che utilizza l’ API JavaMail per inviare un messaggio di posta. L’API JavaMail include un eccellente tutorial e domande frequenti . Dai un nome alla class Mailer e dagli un metodo send() (o qualunque cosa tu voglia). Provalo usando una class di tester con un metodo main() come questo:

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

    Puoi renderlo semplice o avanzato come vuoi. Non importa, purché tu abbia una class con cui puoi inviare una mail del genere.


  3. Ora la parte JSP, non è del tutto chiaro perché hai menzionato JSP, ma dal momento che un JSP dovrebbe rappresentare solo HTML, scommetto che ti piacerebbe avere qualcosa come un modulo di contatto in un JSP. Ecco un esempio di kickoff:

     

    Your email address:

    Mail subject:

    Mail message:

    ${message}

    Sì, semplicemente semplice, solo marcatura / stile come vuoi.


  4. Ora, crea una class Servlet che ascolti un url-pattern di /contact (lo stesso del modulo che sta inviando a) e implementa il metodo doPost() (lo stesso metodo utilizzato dal modulo) come segue:

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

    Questo è tutto. Mantieni semplice e pulito. Ogni cosa ha le sue chiare responsabilità.

È ansible inviare posta da jsp o servlet come si inviano dal file di class utilizzando java mail api. Ecco il link che ti aiuterà per questo:

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

Sto usando il pacchetto javamail e funziona molto bene. I campioni mostrati sopra sono buoni ma come posso vedere non hanno definito i parametri nel file esterno (ad esempio web.xml) che è raccomandato …

Immagina di voler cambiare il tuo indirizzo email o l’host SMTP. È molto più facile modificare il file web.xml di 10 servlet dove hai usato la funzione mail. Ad esempio, aggiungi le righe successive in web.xml

  smtp_server smtp.blabla.com 

Quindi è ansible accedere a quei parametri dal 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); 

Pagina JSP:

 
To Email-id :

Ecco il codice 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); }

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

Questa configurazione di base ha funzionato bene:

Importa mail.jar e activation.jar nella cartella WEB_INF / lib all’interno del progetto.

ottenere mail.jar da JavaMail (ultima versione dal sito ufficiale) .

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

1. Primo jsp: emailForm.jsp

Questo è un modulo utilizzato per trasmettere il contenuto di Mittente, Dettagli destinatario, Oggetto e Messaggio a 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. Secondo jsp: emailUtility.jsp

Questa è l’azione del modulo menzionata nel precedente 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. Vai al seguente URL

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

4. Riavvia il server se ti dà errore del server.