Jsp 通过javamail发送电子邮件时出现空指针异常
我有一个使用javamail发送电子邮件的servlet代码。看起来一切正常,但调用我的send()方法时抛出了NullPointerException。下面是我的代码 Servlet:Jsp 通过javamail发送电子邮件时出现空指针异常,jsp,maven,tomcat,servlets,jakarta-mail,Jsp,Maven,Tomcat,Servlets,Jakarta Mail,我有一个使用javamail发送电子邮件的servlet代码。看起来一切正常,但调用我的send()方法时抛出了NullPointerException。下面是我的代码 Servlet: package com.lsp.web; import com.lsp.service.Mailer; import javax.ejb.EJB; import javax.mail.MessagingException; import javax.servlet.ServletException; impo
package com.lsp.web;
import com.lsp.service.Mailer;
import javax.ejb.EJB;
import javax.mail.MessagingException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "contact", urlPatterns = {"/contact"})
public class ContactServlet extends SpringInjectedServlet {
@EJB
private Mailer emailBean;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getRequestDispatcher("contact.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String customerEmail = req.getParameter("email");
String subject = req.getParameter("subject");
String body = req.getParameter("message");
String error = null;
String succMess = null;
try {
javax.mail.internet.InternetAddress ia = new javax.mail.internet.InternetAddress(customerEmail);
ia.validate();
emailBean.send(customerEmail, subject, body); //HERE I CALL MAILER.SEND() METHOD WHERE NULLPOINTEREXCEPTION CAME FROM
req.setAttribute("succMessage", succMess);
req.getRequestDispatcher("sent.jsp").forward(req, resp);
} catch (javax.mail.internet.AddressException ae) {
error = "您指出的邮箱地址不存在";
req.setAttribute("errorMessage", error);
req.getRequestDispatcher("contact.jsp").forward(req, resp);
}
catch (MessagingException mex) {
error = "发送失败";
req.setAttribute("errorMessage", error);
req.getRequestDispatcher("contact.jsp").forward(req, resp);
}
}
}
然后我调用Mailer类发送邮件:
package com.lsp.service;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
public class Mailer {
public void send(String from, String subject, String body) {
String to = "jshao745@gmail.com";
String host = "localhost";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try{
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// Set Subject: header field
message.setSubject(subject);
// Send the actual HTML message, as big as you like
message.setSubject(body);
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
我的JSP提交表格:
<form action="contact" method="post">
<p>Your email address: <input name="email"></p>
<p>Mail subject: <input name="subject"></p>
<p>Mail message: <textarea name="message"></textarea></p>
<p><input type="submit"><span class="message"></span></p>
</form>
您的电子邮件地址:
邮件主题:
邮件:
当我键入所有信息并单击submit按钮时,我在ContactServlet
中的一行获得了NullPointerException
,其中调用了Mailer类中的send()
方法(我用所有cap单词放了一条注释)
我不知道我做错了什么
如果有人能帮助我,我将不胜感激。我建议不要使用
message.setBody(body);
首先将正文包装到DataHandler中:
DataHandler messageDataHandler = new DataHandler(body, "text/plain; charset=\"UTF-8\"");
message.setDataHandler(messageDataHandler);
请提供堆栈跟踪和行号。您能显示堆栈跟踪吗?至少有一部分。这行看起来可疑:
message.setSubject(body)
。我猜你是想把尸体放好。是的,那是个打字错误。谢谢。您已经将邮件类定义为EJB了吗?由于您必须使用(@)无状态或(@)有状态对其进行注释,以便使用(@)EJBI从您的ContactServlet引用它,所以我不知道为什么会这样做,但我一直对此耿耿于怀,这个答案修复了它。谢谢