环境:struts+spring
sendmail类的具体内容参照http://www.blogjava.net/sunfruit/archive/2006/02/19/31523.html
执行代码:                  String mailPathlog="logs";
String username="xxxx";//用户名
String pwd="xxxxx";//密码
String myname="xxxxx";//发送邮件名
String tomail="xxxxx";//目的邮件
String mysubject="这是一个测试";
String mytext="这是一个测试邮件内容";
String htmlandtext="text";
String s=SendMail.sendmail(mailPathlog,pwd,username,myname,tomail,mysubject,mytext,htmlandtext);
问题:
在action调用sendmail类的一个方法时提示如下错误:
严重: Servlet.service() for servlet default threw exception
java.lang.NullPointerException
at com.(...).adminbg.action.(....).sendMail(UserAdministerAction.java:761)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229)
at com.chemmade.utils.CheckLoginInterceptor.doIntercept(CheckLoginInterceptor.java:30)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:221)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:167)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
.
.
.
PS:javamial的2个包不缺少,在执行到sendmail时报错

解决方案 »

  1.   

    mail.jar和activation.jar的版本会不会引起这个问题 我的JDK是1.5
      

  2.   

    struts2 自带的mail包也java 带的包冲突。 你在myeclipse 里面把mail 去了  
      

  3.   

    删除J2EE.JAR里面的mail 同样报错
      

  4.   

    上传邮件代码,测试通过!/*
     * 发送邮件
     */
    public String sendEmail(users u,String Cdkey)
    {
    Properties p = new Properties();
    //是否需要登录验证,答案是肯定的
    p.setProperty("mail.smtp.auth","true" );
    //选择的(发送)邮件服务器
    p.setProperty("mail.host","smtp.qq.com" );
    //定义你的邮件传输协议
    p.setProperty("mail.transport.protocol","smtp" );
    //你的邮箱(发件人)
    p.setProperty("mail.from", "[email protected]");
    //是否输出调试信息
    p.setProperty("mail.debug","true" );
    //创建与服务器的会话(需要用户名和密码)
    Session session  = Session.getInstance(p, new Authenticator(){
    //通过Authenticator的实例来提交用户名和密码信息BASE 64
    protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication("[email protected]","123456");//邮箱密码
    }
    });
    Message message = new MimeMessage(session);
    try {
    //设置邮件主题
    message.setSubject("主题:激活Article的邮件");
    //邮件发送时间
    message.setSentDate(new Date());
    //发送人的伪地址
    message.setReplyTo(new InternetAddress[]{new InternetAddress("Article")});
    //邮件内容
    message.setText(u.getUsersName()+"   请点击超链接,http://192.168.83.179:8080/Article/register.jsp?cdkey="+Cdkey+",激活该账号");
    Transport tran = session.getTransport();
    //发送
    tran.send(message, new InternetAddress[]{new InternetAddress(u.getUsersEmail())});
    //传送完成
    tran.close();
    return SUCCESS;
    } catch (MessagingException e) {
    return ERROR;
    }
    }
      

  5.   

    做了进一步调试,把发短信的方法直接拿过来是可以用的
    现在的问题是在调用SendMail是掉不到
    具体描述如下:
    增加了一个.java为发送短信的类SendMail,sendmail负责发送
    在需要调用的地方import com.xxx.xxx.SendMail
    private SendMail SendMail;
    然后SendMail.sendmail();
    在调试的时候发现SendMail为空,不能调用sendmail方法