spring mail中的空指针异常
这是我的类和xml文件: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
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);