Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
spring mail中的空指针异常_Spring - Fatal编程技术网

spring mail中的空指针异常

spring mail中的空指针异常,spring,Spring,这是我的类和xml文件: public class MailMail { private MailSender mailSender; private SimpleMailMessage MailMessage; public void setMailSender(MailSender mailSender) { this.mailSender = mailSender; } public boolean sendM

这是我的类和xml文件:

public class MailMail {


    private MailSender mailSender;

    private SimpleMailMessage MailMessage;
    public void setMailSender(MailSender mailSender) {  
        this.mailSender = mailSender;  
    }  



    public boolean sendMail(LeaveApplyForm leaveApplyForm) throws MailException
    {
        SimpleMailMessage message = new SimpleMailMessage();

        EmpRegistrationForm empRegistrationForm=new EmpRegistrationForm();
        String to=leaveApplyForm.getFirstApprover();

    //  String to1=leaveApplyForm.getFinalApprover();
        String text=leaveApplyForm.getReason();

        String from=empRegistrationForm.getEmail();
        String subject="Application for the Leave";

        message.setFrom(from);

                message.setTo(to);

                message.setSubject(subject);

                message.setText(text);

                mailSender.send(message);


    return true;    

    }
实际上有一个应用程序,在提交该表单时,电子邮件应该发送给申请人,因此我尝试获取用户刚刚提交的电子邮件id等详细信息,这些详细信息暂时保存在bean类中:

private String LeaveType;
    private String leavePeriod;

    private String reason;
    private String FirstApprover;

    private String finalApprover;
    private String selectHours;

    public String getLeaveType() {
        return LeaveType;
    }

    public void setLeaveType(String leaveType) {
        LeaveType = leaveType;
    }

    public String getLeavePeriod() {
        return leavePeriod;
    }

    public void setLeavePeriod(String leavePeriod) {
        this.leavePeriod = leavePeriod;
    }

    public String getReason() {
        return reason;
    }

    public void setReason(String reason) {
        this.reason = reason;
    }

    public String getFirstApprover() {
        return FirstApprover;
    }

    public void setFirstApprover(String firstApprover) {
        FirstApprover = firstApprover;
    }

    public String getFinalApprover() {
        return finalApprover;
    }

    public void setFinalApprover(String finalApprover) {
        this.finalApprover = finalApprover;
    }

    public String getSelectHours() {
        return selectHours;
    }

    public void setSelectHours(String selectHours) {
        this.selectHours = selectHours;
    }
}
我的s-servlet.xml是:

<context:component-scan base-package="com.controller" />

   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/jsp/" />
      <property name="suffix" value=".jsp" />
   </bean>
   <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="classpath:messages"/>     
        <property name="defaultEncoding" value="UTF-8"/>
  </bean>

    <bean id="localeChangeInterceptor"
        class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
        <property name="paramName" value="lang" />
    </bean>      
    <bean id="localeResolver"
        class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
        <property name="defaultLocale" value="en"/>
</bean>      
EmpleavapplyController是:

static Logger log = Logger.getLogger(EmpLeaveApplyController.class.getName());

    @RequestMapping(value = "/leaveapplyform", method = RequestMethod.GET)
       public String showForm(ModelMap model,HttpServletRequest request) 
       {
         log.info("Inside Controller returning to leaveapplyform page....");

         LeaveApplyForm leaveapplyform =  new LeaveApplyForm();
        model.put("leaveapplyform", leaveapplyform);    

        /*EmpLeaveApplyWorker worker1=new EmpLeaveApplyWorker();*/



    return GlobalConstants.LEAVE_APPLY; 
       }

    @RequestMapping(value = "/leaveapplyform" ,method = RequestMethod.POST)
    public String processForm(@ModelAttribute("leaveapplyform") LeaveApplyForm leaveapplyform,HttpServletRequest request, HttpServletResponse response, ModelMap model)
    {
        leaveapplyform = (LeaveApplyForm) model.get("leaveapplyform");

        /*if(result.hasErrors()){
            return GlobalConstants.ERRORPAGE;
        }*/



        EmpLeaveApplyWorker worker=new EmpLeaveApplyWorker();
        boolean status=worker.validateUser(leaveapplyform);
        if(status)
        {
            MailMail leaveEmail=new MailMail();
            boolean statusEmail=leaveEmail.sendMail(leaveapplyform);
            if(statusEmail)
            {

                System.out.println("Now you are sending the mail");
            }


        else{

                System.out.println("you are not reaching to the mail");
            }

            System.out.println(status);
            System.out.println("------------------came to the last poi8nt of todays task-------------------------------");
            return GlobalConstants.HOME_PAGE;
        }
        else
        {System.out.println(status);
            return GlobalConstants.LEAVE_APPLY;
        }

问题是因为您没有在xml中声明mailSender bean,所以它是空的。将下面的代码添加到s-servlet.xml

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.gmail.com" />
<property name="port" value="587" />
<property name="username" value="xxxx@gmail.com" />
<property name="password" value="xxxx" />
<property name="javaMailProperties">
<props>
<prop key="mail.transport.protocol">smtp</prop>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.starttls.enable">true</prop>
</props>
</property>
</bean>
然后在调用sendMail方法之前将mailSender设置为MailMail实例,如下例所示:

 MailMail leaveEmail=new MailMail();
 //set the mailSender to the MailMail class
 leaveEmail.setMailSender(mailSender);
 boolean statusEmail=leaveEmail.sendMail(leaveapplyform);

请编辑问题并发布完整的堆栈跟踪解决什么错误?您遇到了一个异常,您认为给出它的详细信息与问题无关?我正在发布错误。您需要在s-servlet.xml中为邮件声明一个bean,您是否遵循教程来完成此操作?是的,我遵循Javeasyforu教程来完成此操作,你能在s-servlet.xml中导出邮件的bean吗?如何设置os setMailSende的属性。我现在发布empleavapplycontroller,请检查一下。@user3264841我刚刚用控制器的信息编辑了我的答案,现在应该可以了。。。总的来说,我建议您在进入J2EE开发之前学习和实践基本的OO概念
@Autowired
private JavaMailSender mailSender;
 MailMail leaveEmail=new MailMail();
 //set the mailSender to the MailMail class
 leaveEmail.setMailSender(mailSender);
 boolean statusEmail=leaveEmail.sendMail(leaveapplyform);