2012-11-20 38 views
-2

下面是我的jsp代碼用來保存餐廳表。我希望在表保留成功時向用戶發送電子郵件。但它不能發送電子郵件給用戶。我已經嘗試了很多方法來解決它,但它也向我返回一個錯誤信息,電子郵件無法發送。如何解決在jsp中發送電子郵件動作

<%@page import="java.util.Date"%> 
<%@ page import="java.util.*" %> 
<%@ page import="javax.mail.*" %> 
<%@ page import="javax.mail.internet.*" %> 
<%@ page import="javax.mail.internet.*,javax.activation.*"%> 
<%@ page import="javax.servlet.http.*,javax.servlet.*" %> 
<%@page import="java.text.SimpleDateFormat"%> 
<%@page import="booking.Bean.Login"%> 
<%@page import="booking.DB.OrderDB"%> 
<%@page import="booking.Bean.Order"%> 
<%@page import="booking.Wrapper.Wrapper"%> 
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<link href="css/style.css" rel="stylesheet" type="text/css"> 
<title>Add Order JSP</title> 
</head> 
<body> 
    <div id="container"> 
     <div id="header"> 
      <jsp:include page="header.jsp" /> 
     </div> 

     <div id="menu"> 
    <ul> 

       <li class="menuitem"><a href="aboutC.jsp">About</a> 
       </li> 
       <li class="menuitem"><a href="clientsC.jsp">Menu</a> 
       </li> 
       <li class="menuitem"><a href="contactC.jsp">Contact Us</a> 
       </li> 
       <li class="menuitem"><a href="login.jsp">Logout</a> 
       </li> 
      </ul> 

     </div> 

     <div id="leftmenu"> 

      <div id="leftmenu_top"></div> 

      <div id="leftmenu_main"> 
       <jsp:include page="orderMenu.jsp" /> 
      </div> 

      <div id="leftmenu_bottom"></div> 
     </div> 
     <div id="content"> 
      <div id="content_top"></div> 
      <div id="content_main"> 
       <h2>Order Status</h2> 
       <% 

        String OrderCustId = request.getParameter("OrderCustIDtxt"); 
        String OrderDate = request.getParameter("OrderDatetxt"); 
        String OrderTime = request.getParameter("OrderTimetxt"); 
        String OrderSeat = request.getParameter("OrderSeattxt"); 
        //char BStatus = request.getParameter("OrderStatustxt"); 
        //String userId = request.getParameter("txtUserId"); 
        String custName = request.getParameter("textCustName"); 
        String cEmail = request.getParameter("textCustEmail"); 
        String cPhoneNo = request.getParameter("textCustContactNo"); 

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
        Date date = sdf.parse(OrderDate); 


        Order order = new Order(); 
        order.getOrderId(); 
        order.setCustId(OrderCustId); 
        order.setStaffId("2000"); 
        order.setOrderDate(date); 
        order.setOrderTime(OrderTime); 
        order.setOrderSeat(OrderSeat); 
        order.setBStatus('A'); 
        order.setOCustName(custName); 
        order.setcOEmail(cEmail); 
        order.setcOPhoneNo(cPhoneNo); 

        OrderDB orderDB = new OrderDB(); 
        int seatAvaliable=orderDB.checkSeat(order); 
        if(seatAvaliable<35){     
         Wrapper wrapper = new Wrapper(); 
         int status = wrapper.addOrder(order); 

         if (status > 0) { 
          out.print("<center><h5><font color='blue'>Successful Place Order</font></h5></center>"); 
        %> 
        <br> 
        <table border="0" align="center"> 
         <tr> 
          <th colspan="2" bgcolor="lightgrey">Display Details Added New 
           Order</th> 
         </tr> 
         <tr> 
          <td>Order ID:</td> 
          <td><%=order.getOrderId()%></td> 
         </tr> 
         <tr> 
          <td>Customer ID:</td> 
          <td><%=OrderCustId%></td> 
         </tr> 
         <tr> 
          <td>Order Date:</td> 
          <td><%=date%></td> 
         </tr> 
         <tr> 
          <td>Order Time:</td> 
          <td><%=OrderTime%></td> 
         </tr> 
         <tr> 
          <td>Order Seat:</td> 
          <td><%=OrderSeat%></td> 
         </tr> 
         <tr> 
          <td>Customer Name:</td> 
          <td><%=custName%></td> 
         </tr> 
         <tr> 
          <td>Customer Email:</td> 
          <td><%=cEmail%></td> 
         </tr> 
         <tr> 
          <td>Customer Contact No:</td> 
          <td><%=cPhoneNo%></td> 
         </tr> 
         <tr> 
          <td colspan="2">&nbsp;</td> 
         </tr> 
         <tr> 
          <td></td> 
          <td><input type="button" value="Back" 
           onclick="history.go(-1)" /></td> 
         </tr> 

        </table> 
        <% 
         String result; 
         String to = cEmail; //ur client email 
         String from = "[email protected]"; //ur email address 

         String host = "smtp.gmail.com";   //for yahoo smtp.mail.yahoo.com == 465 
         Properties properties = System.getProperties(); 
         properties.setProperty("mail.smtp.host", host); 
         properties.setProperty("mail.smtp.port","587"); 
         Session mailSession = Session.getDefaultInstance(properties); 

         try{ 
          MimeMessage message = new MimeMessage(mailSession); 
          message.setFrom(new InternetAddress(from)); 
          message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); 

          //This is your email subject 
          message.setSubject("L'eo Cafe Booking Success"); 
          //This is the actual msg 
          message.setText(custName+" "+"Your table has been reserved at "+date+" "+OrderTime); 
          // Send message 
          Transport.send(message); 
          result = "Booking information sent successfully...."; 
         }catch (MessagingException mex) { 
          mex.printStackTrace(); 
          result = "Error: unable to send message...."; 
         } 
         out.println("Result: " + result + "\n"); 
        %> 
        <% 

         } else { 
          out.print("<center><h5><font color='red'>Failed to Place Order</font></h5></center>"); 
         } 
        %> 
        <br> 
        <% 
         } 
        else{ 
         out.print("<center><h5><font color='red'>Booking Full!!!</font></h5></center>");  
         } 
        %> 



      </div> 
      <div id="content_bottom"></div> 
      <jsp:include page="footer.jsp" /> 
     </div> 
    </div> 
</body> 
</html> 
下面

是從系統中得到異常:

javax.mail.SendFailedException: Sending failed; 
    nested exception is: 
    class javax.mail.MessagingException: 530 5.7.0 Must issue a STARTTLS command first. ay5sm8087291pab.1 

    at javax.mail.Transport.send0(Transport.java:218) 
    at javax.mail.Transport.send(Transport.java:80) 
    at org.apache.jsp.addOrderJSP_jsp._jspService(addOrderJSP_jsp.java:256) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

希望可以幫我解決這個問題,因爲這是迫切需要我通過我的最後一年的項目。謝謝。

+0

我沒有看到用戶並通過身份驗證。 – jddsantaella

+1

請不要針對完全不同的問題重新使用/編輯現有問題。這將使所有答案無效,並使整個問題+答案對於未編輯前未讀過原始問題的未來讀者感到困惑。相反,只需發佈​​一個新問題。 – BalusC

回答

0

您正在連接的郵件服務器未運行或配置爲在此方案中拒絕連接。您甚至可能沒有在本地主機上安裝郵件服務器

您可以通過telnet-ing在本地主機上的端口25進行確認。

啓動郵件服務器或檢查配置,或​​者使用其他主機。

+0

問題已經改變;-) – jddsantaella

+1

這個問題已經發生了很大的變化,它需要一個新的問題,關閉這個問題。將來改變這種程度時請小心。 – ChrisBint

0

不知道MimeMessage message = new MimeMessage(mailSession);會在MimeMessage中獲得合適的smtp服務器。您應該手動設置它:

message.addHeader("mail.smtp.host", host); 
message.addHeader(""mail.smtp.port","587"); 

併爲每個標題做它。另外,您可以創建交通運輸的一個實例,見here

編輯

看到你的蹤影,我想你想連接到gmail smtp。這樣做,你需要把你的密碼放在你想避免的代碼中。也許嘗試安裝本地smtp服務器?

+1

當我爲每個標題設置時,仍然會出現相同的錯誤。 – tontontv

+0

我嘗試添加密碼,但它仍然無法工作。如何安裝本地smtp服務器? – tontontv

相關問題