【引言】我自己单独新建一个项目的话(只包含一个html页面和一个jsp页面),使用javamail发送邮件是没有问题你的,但放在公司的这个项目当中,就会出现错误~~ 【问题】提示错误信息
Error in Processing /html/en/contact/sendmail.jsp
org.apache.jasper.JasperException: Exception in JSP: /html/en/contact/sendmail.jsp:2724: String country=request.getParameter("CountryType");
25: String content=request.getParameter("content");
26: 
27: String bodyTemp1=country.concat(content);
28: String bodyTemp2=companyType.concat(bodyTemp1);
29: String body=companyName.concat(bodyTemp2);
30: 
Stacktrace:
at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:491)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:413)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.bigning.fantastic.filter.FantasticFilter$1.forward(FantasticFilter.java:61)
at com.bigning.fantastic.action.FantasticActionInvoker.invoke(FantasticActionInvoker.java:304)
at com.bigning.fantastic.filter.FantasticFilter.doFilter(FantasticFilter.java:57)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:843)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:679)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1303)
at java.lang.Thread.run(Thread.java:595)
'Exception in JSP: /html/en/contact/sendmail.jsp:27
24: String country=request.getParameter("CountryType");
25: String content=request.getParameter("content");
26: 
27: String bodyTemp1=country.concat(content);
28: String bodyTemp2=companyType.concat(bodyTemp1);
29: String body=companyName.concat(bodyTemp2);
30: 
Stacktrace:' is Caused by 
java.lang.NullPointerException
at org.apache.jsp.html.en.contact.sendmail_jsp._jspService(sendmail_jsp.java:72)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:371)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.bigning.fantastic.filter.FantasticFilter$1.forward(FantasticFilter.java:61)
at com.bigning.fantastic.action.FantasticActionInvoker.invoke(FantasticActionInvoker.java:304)
at com.bigning.fantastic.filter.FantasticFilter.doFilter(FantasticFilter.java:57)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:843)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:679)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1303)
at java.lang.Thread.run(Thread.java:595)
(截图)javamailjsp

解决方案 »

  1.   

    (代码)
    sendmail.jsp(提交表单之后直接发到邮箱)<%@page contentType="text/html;charset=UTF-8"%>
    <%@page import="java.util.*"%>
    <%@page import="javax.mail.*"%>
    <%@page import="javax.mail.internet.*"%>
    <%@page import="javax.activation.*"%>  <html>
      <head>
      <title>sendmail.jsp</title>
      </head><body>
    <%String from=request.getParameter("from");
    String password=request.getParameter("password");
    //String subject=request.getParameter("subject");//获取body部分内容
    String company=request.getParameter("company");
    String companyType=request.getParameter("companyType");
    String country=request.getParameter("CountryType");
    String content=request.getParameter("content");String bodyTemp1=country.concat(content);
    String bodyTemp2=companyType.concat(bodyTemp1);
    String body=company.concat(bodyTemp2);//获取邮局服务器
    int i;
    for(i=0; from.charAt(i) != '@'; i++)
    {}String stringDomain=from.substring(i+1); //获取域名String smtp="smtp.";
    String mailServer=smtp.concat(stringDomain); //获取最终的邮局服务器 
    //
    boolean sessionDebug = false;//获得系统属性对象,用下两句的任一句均可
    Properties props=new Properties(); 
    //设置SMTP主机
    //以下一句是对任意的SMTP 邮件服务器均可,并且有了这一句,将不用设置传输协议了
    props.put("mail.smtp.host", mailServer);//Session mailSession = Session.getDefaultInstance(props,null);
    props.put("mail.smtp.auth", "true");
    final String user = from;
    final String pswd = password;
            Session mailSession = Session.getDefaultInstance(props, new Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(user, pswd);
                }
            });/*
    try {
            Store store = mailSession.getStore("pop3");
            store.connect();
    }catch(javax.mail.AuthenticationFailedException e) {
    out.println(e.toString());
    }
    *///这样将确定接收方的邮件服务器主机,
    //props.put("mail.host",host);
    //设置邮件传输协议方式
    //props.put("mail.transport.protocol","smtp");
    //获取邮件会话对象
    //Session mailSession = Session.getDefaultInstance(props,null);
    mailSession.setDebug(sessionDebug);try{
    //创建MIME邮件对象
    Message msg = new MimeMessage(mailSession);//设置收信人
    InternetAddress[] addressTo = {new InternetAddress("[email protected]")};
    msg.setRecipients(Message.RecipientType.TO,addressTo);//InternetAddress[] addressFrom = {new InternetAddress(from)};
    msg.setFrom(new InternetAddress(from));//msg.setSubject(subject);
    msg.setSentDate(new Date());
    msg.setText(body);//发送邮件
    Transport.send(msg);
    %>
    <p>Your mail has been sent.</p>
    <% 
    }
    catch(Exception e){
    out.println(e.toString());
    }
    %>
      
      </body>
      </html>
      

  2.   

    那个空指针的问题,我加了个判断语句就没事了
    if(content == null) {  
        content = "";  
    } -------------------------
    但是又出现这个问题:
    'Exception in JSP: /html/en/contact/sendmail.jsp:54
    51: } 
    52: //鑾峰彇閭眬鏈嶅姟鍣�
    53: int i;
    54: for(i=0; from.charAt(i) != '@'; i++)
    55: {
    56: 
    57: }
    Stacktrace:' is Caused by 
    java.lang.StringIndexOutOfBoundsException: String index out of range: 0这个循环怎么会索引越界呢?
      

  3.   

    你就没想过 from 没有 @的情况吗,没事加断点 debug下啊
      

  4.   

    先打印from出来看看,确定取数据是否正确。
    另外,你这样的写法本身也有一定问题吧,如果输入非法的地址没有@(我知道前台会验证,但是后台处理一样会考虑到),一样会导致出错。我个人觉得,可以考虑使用from.indexOf('@')来取下标,如果为-1,表示地址没含有@,大于-1再截取。
      

  5.   

    谢谢,按你说的改了一下,又出现新问题:
    'Exception in JSP: /html/en/contact/sendmail.jsp:85
    82: final String user = from;
    83: final String pswd = password;
    84: 
    85: Session mailSession = Session.getDefaultInstance(props, new Authenticator() {
    86:             protected PasswordAuthentication getPasswordAuthentication() {
    87:                 return new PasswordAuthentication(user, pswd);
    88:             }
    Stacktrace:' is Caused by 
    java.lang.SecurityException: Access to default session denied
    at javax.mail.Session.getDefaultInstance(Session.java:327)然后,我网上一查,说要把getDefaultInstance——》改成getInstance,结果出现新的错误:
    javax.mail.internet.AddressException: Illegal address in string ``''真不知道怎么解决了