2017-05-22 2 views
0

Ich möchte E-Mail in JSP mit HTML-Formular für Wert, von, Thema, Körper usw. senden. Aber dieser Code funktioniert nicht richtig. Bitte hilf mir. DankSenden einer E-Mail mit JSP

<%@ page import="java.io.*,java.util.*,javax.mail.*"%> 
<%@ page import="javax.mail.internet.*,javax.activation.*"%> 
<%@ page import="javax.servlet.http.*,javax.servlet.*" %> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>JSP Page</title> 
     <link href="bootstrap.css" rel="stylesheet" type="text/css"/> 
     <script src="bootstrap.js" type="text/javascript"></script> 
     <link href="style.css" rel="stylesheet" type="text/css"/> 
     <script src="jquery-3.1.1.js" type="text/javascript"></script> 

    </head> 
    <body style="background-color:lightgreen"> 
     <form class="form-group" style=" margin-right:200px; padding: 30px 0px 0 25px; background-color:white">      
      <p style="margin: -30px 0 10px 70px; font-size: 20px">Sending Email </p> 
       <input type="email" class="form-control" placeholder="To" required name="to" style="width:300px" /><br /> 
       <input type="email" class="form-control" placeholder="From" required name="from" style="width:300px" /><br /> 
       <input type="text" class="form-control" placeholder="subject:" required name="subject" style="width:300px" /><br /> 
       <textarea placeholder="body" required name="body" cols="32" rows="7" style="border:1px gray solid;border-radius:5px;"></textarea><br /> 
       <input type="submit" value="send" name="btn" style="width: 300px; height: 35px; border: 1px solid gainsboro; border-radius: 4px; background-color:limegreen; color: white"/><br /><br /> 
    <% 
    String from = request.getParameter("from"); 
      String to = request.getParameter("to"); 
      String subject = request.getParameter("subject"); 
      String bod = request.getParameter("body"); 
     final String username = "muneeb"; 
     final String password = "******"; 
// Get system properties object 
     String host = "smtp.gmail.com"; 

     Properties props = new Properties(); 
     props.put("mail.smtp.auth", "true"); 
     props.put("mail.smtp.starttls.enable", "true"); 
     props.put("mail.smtp.host", host); 
     props.put("mail.smtp.port", "587"); 

     // Get the Session object. 
     Session session1 = Session.getInstance(props, 
     new javax.mail.Authenticator() { 
     protected PasswordAuthentication getPasswordAuthentication() { 
      return new PasswordAuthentication(username, password); 
     } 
     }); 

     try { 
     // Create a default MimeMessage object. 
     Message message = new MimeMessage(session1); 

     // Set From: header field of the header. 
     message.setFrom(new InternetAddress(from)); 

     // Set To: header field of the header. 
     message.setRecipients(Message.RecipientType.TO, 
     InternetAddress.parse(to)); 

     // Set Subject: header field 
     message.setSubject(subject); 

     // Now set the actual message 
     message.setText(bod); 
     // Send message 
     Transport.send(message); 

     System.out.println("Sent message successfully...."); 

     } catch (MessagingException e) { 
      System.out.println(" faild message...."); 

     } 
%> 
    </div> 
     </div> 
</body> 
</html> 

Es zeigt diesen Fehler:

org.apache.jasper.JasperException: An exception occurred processing JSP page /assignment3/send_email.jsp at line 132 129: Message message = new MimeMessage(session1); 130: 131: // Set From: header field of the header. 132: message.setFrom(new InternetAddress(from)); 133: 134: // Set To: header field of the header. 135: message.setRecipients(Message.RecipientType.TO, Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:584) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:481) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329) javax.servlet.http.HttpServlet.service(HttpServlet.java:742) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

+0

Es ist schwer zu sagen, was mit einem vollen Stacktrace falsch ist, aber ich würde auf eine schlechte "FROM" wetten, so "InetAddress" -Konstruktor wirft –

+0

Ich weiß nicht, was Sie versuchen zu erreichen, aber das Scriptlet wird vor dem ausgeführt Benutzer erhält die Seite, nein, wenn sie dieses Formular senden –

+0

Vermeiden Sie die Verwendung von Scriptlets so viel wie möglich. http://stackoverflow.com/questions/3177733/how-to-avoid-java-code-in-jsp-files?rq=1 –

Antwort

0

Ihre JSP das Formular anzuzeigen ausgeführt werden, und es wird versuchen, eine E-Mail zu senden, bevor der Benutzer eine Chance, etwas zu geben hat.

Sie würden besser den Java-Code in einem Servlet verschieben.

+0

Oder verschieben Sie den sendenden Teil zu einer anderen JSP, die das Ziel des POST ist, wenn das Formular gesendet wird. –

0

Ich denke, wenn Sie dies in Servlet tun, ist es besser.

Schauen Sie sich an ich Ihnen ein einfaches Beispiel geben wird, die Parameter aus HTML-Formular erhalten und es in Servlets arbeiten wie:

`@WebServlet("/Servlet") 
    public class Servlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public Servlet() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse 
    *  response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     PrintWriter out = response.getWriter(); 
     response.setContentType("text/html"); 
     RequestDispatcher requestDispatcher; 

     String from = request.getParameter("sender"); 
     String password = request.getParameter("pass"); 
     String to = request.getParameter("receiver"); 
     String subject = request.getParameter("subject"); 
     String message = request.getParameter("message"); 

     Properties properties = System.getProperties(); 
     properties.put("mail.smtp.auth", "true"); 
     properties.put("mail.smtp.starttls.enable", "true"); 
     properties.put("mail.smtp.port", "587"); 

     if (from.contains("hotmail")) { 
      properties.put("mail.smtp.host", "smtp.live.com"); 

     } else if (from.contains("gmail")) { 
      properties.put("mail.smtp.host", "smtp.gmail.com"); 

     } else if (from.contains("yahoo")) { 
      properties.put("mail.smtp.host", "smtp.mail.yahoo.com"); 

     } else { 
      out.println("<h2 style='color:red;'>Unknown domain name!!</h2><br>" 
        + "<p>Please use 'Yahoo or Gmail or Hotmail'</p>"); 
     } 

     Session messageSession = Session.getDefaultInstance(properties, new Authenticator() { 
      @Override 
      protected PasswordAuthentication getPasswordAuthentication() { 

       return new PasswordAuthentication(from, password); 
      } 
     }); 

     try { 
      MimeMessage mimeMessage = new MimeMessage(messageSession); 
      mimeMessage.setFrom(new InternetAddress(from)); 
      mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(to)); 
      mimeMessage.setSubject(subject); 
      mimeMessage.setText(message); 

      Transport.send(mimeMessage); 
      requestDispatcher = request.getRequestDispatcher("index.html"); 
      requestDispatcher.forward(request, response); 
      out.println("<h2 style='color:green;'>Message sended successfully.</h2><br>" + "<p>Welldone.</p>"); 

     } catch (MessagingException e) { 
      requestDispatcher = request.getRequestDispatcher("index.html"); 
      out.println("<h2 style='color:red;'>Fatal Error!!</h2><br>" + "<p>" + e.getMessage() + "</p>"); 
     } 

    } 

} 
` 

und grundlegendes HTML-Formular:

<body> 
<h1 align="center">Send Email Form</h1> 
<form class="cf" action="Servlet" method="post"> 
    <div align="center"> 
     <table> 
      <tr> 
       <td>From : </td><td><input type="email" name="sender" size="30px" class="input-email" 
        placeholder="Email address"></td> 
      </tr> 
      <tr> 
       <td>Password : </td><td><input type="password" name="pass" size="30px" class="input-email" 
        placeholder="Sender Password"></td> 
      </tr> 
      <tr> 
       <td>To : </td><td><input type="email" name="receiver" size="30px" class="input-email" 
        placeholder="Email address"></td> 
      </tr> 
      <tr> 
       <td>Subject : </td><td><input type="text" name="subject" size="30px" class="input-email" 
        placeholder="Subject"></td> 
      </tr> 
      <tr> 
       <td>Message : </td><td><textarea name="message" id="input-message" 
         class="text" placeholder="Message"></textarea></td> 
      </tr> 
      <tr> 
       <td><input type="submit" value="SEND" class="button"> 
       </td> 
       <td><input type="reset" value="CLEAR" class="button"> 
       </td> 
      </tr> 
     </table> 
    </div> 

</form> 

Ich hoffe das hilft dir.

Verwandte Themen