Я пытаюсь отправить электронное письмо с помощью JavaMail. Я использовал EJB @Stateless и @LocalBean, но он дал мне NullPointerException при попытке отправить почту.NullPointerException на классе EJB при отправке электронной почты с помощью JavaMail
Мой сервлет выглядит следующим образом:
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();
//LINE 34 emailBean.send(customerEmail, subject, body); ------>NullPointerException
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);
}
}
}
Тогда мой EJB класс Mailer является:
package com.lsp.service;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
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;
@Stateless
@LocalBean
public class Mailer {
public void send(String from, String subject, String body) {
String to = "[email protected]";
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.setText(body);
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Затем после вставки сообщения на мой отправить форму на JSP и нажмите отправить, я получил это исключение:
java.lang.NullPointerException
com.lsp.web.ContactServlet.doPost(ContactServlet.java:34)
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
com.lsp.web.LoginFilter.doFilter(LoginFilter.java:39)
Внутри pom.xml, я добавил эти зависимости:
<!--JavaMail API-->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.5.1</version>
</dependency>
<!--EJB-->
<dependency>
<groupId>javax.ejb</groupId>
<artifactId>ejb-api</artifactId>
<version>3.0</version>
</dependency>
<!--Java activation-->
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<!--EJB LocalBean-->
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>ejb31-api-experimental</artifactId>
<version>3.1.1</version>
</dependency>
Я предполагаю, что это связано с EJB, но я не уверен, где я ошибся.
Кроме того, у меня в настоящее время ничего нет на ejb-jar.xml. Нужно ли его редактировать?
Я ценю, если кто-то может мне помочь.
, пожалуйста, предоставьте дополнительную информацию о вашей среде; какой сервер приложений вы используете? как вы упаковали приложение? являются ли сервлеты и контейнеры ejb запущенными в разных JVM? –
Я использую IntelliJ, и я добавил все файлы jar в Project Modules. Поскольку я также использую maven, я добавил все необходимые зависимости в pom.xml. – user3014926
IntelliJ - это IDE, а не сервер –