【问题标题】:Java Mail Api - Mail Doesn't SentJava Mail Api - 邮件未发送
【发布时间】:2019-12-18 09:36:06
【问题描述】:

我有一个 java web 项目。我正在尝试将与我们联系的部分添加到我的 Web 项目中。 netbeans 没有任何警告我,但是当我填写文本框并单击按钮时,邮件不会发送。

这是我的 servlet 代码:

@WebServlet(name = "MailDispatcherServlet", urlPatterns = {"/MailDispatcherServlet"})
public class MailDispatcherServlet extends HttpServlet {

    @EJB
    private MailSenderBean mailSender;



    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");

        String toEmail = request.getParameter("email");
        String subject = request.getParameter("subject");
        String message = request.getParameter("message");

        String fromEmail = "gorkemsoftware@gmail.com"; 
        String usurname = "gorkemsoftware"; 
        String password = "mypasword"; 



        try (PrintWriter out = response.getWriter()) {
            /* TODO output your page here. You may use following sample code. */

            mailSender.sendEmail(fromEmail, usurname, password, toEmail, subject, message);



            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>MAIL STATUS</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>MAIL STATUS !!!</h1>");
            out.println("<b>MAIL SENT SUCCESSFULLY  </b><br>"); 
            out.println("Click <a href='frmMail.jsp'>here</a> to go back!!!");
            out.println("</body>");
            out.println("</html>");
        }
    }

这是我的 Bean 代码:

@Stateless
public class MailSenderBean {

    public void sendEmail(String fromEmail, String username, String password,
            String toEmail, String subject, String message){

        try {
            Properties props = System.getProperties();
            props.put("mail.smtp.host", "stmp.gmail.com");
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.port", "465");
            props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            props.put("mail.smtp.socketFactory.port", "465");
            props.put("mail.smtp.socketFactory.fallback", "false");


            Session mailSession = Session.getDefaultInstance(props, null);
            mailSession.setDebug(true);

            Message mailMessage = new MimeMessage(mailSession);
            mailMessage.setFrom(new InternetAddress(fromEmail));
            mailMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(toEmail));
            mailMessage.setContent(message, "text/html");
            mailMessage.setSubject(subject);

            Transport transport = mailSession.getTransport("smtp");
            transport.connect("smtp.gmail.com", username, password);

            transport.sendMessage(mailMessage, mailMessage.getAllRecipients());

        } catch (Exception ex) {
            Logger.getLogger(MailSenderBean.class.getName()).log(Level.SEVERE, null, ex);
        }



    }

}

谁能告诉我这个项目有什么问题?邮件地址和密码也是正确的。我更改了 gmail 的安全设置。

这是我点击发送按钮时的输出:

邮件状态!!!

邮件成功发送 点击这里返回!!!

【问题讨论】:

  • 日志有异常吗?
  • 我想比现在更好地编写代码来理解你的意思...... :)
  • 我的意思是一定有一些错误日志打印到netbeans的控制台,当你点击发送按钮时你看到任何错误吗?
  • 当我点击发送按钮时,输出是:AIL STATUS !!!邮件发送成功点击这里返回!!! - 所以它不会给我任何错误。当运行文件本身/Users/GorkemKiziltas/NetBeansProjects/SEN2001_Project_02/nbproject/build-impl.xml:1160:执行此行时出现以下错误:/Users/GorkemKiziltas/NetBeansProjects/SEN2001_Project_02/nbproject/build-impl.xml: 1170:org.netbeans.api.debugger.jpda.DebuggerStartException:连接被拒绝(连接被拒绝)这是netbeans输出面板上的输出

标签: java api email servlets web-project


【解决方案1】:

我认为通过 SSL(端口 465)发送邮件时我们有 pb: 我更喜欢像这样对您的代码进行一些更改:

public void sendEmail(String fromEmail, String username, String password,
        String toEmail, String subject, String message){
    try {
        Properties props = System.getProperties();
        props.put("mail.smtp.host", "stmp.gmail.com");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.port", "465");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.ssl.enable", "true"); // added
        props.put("mail.smtp.socketFactory.port", "465");
        props.put("mail.smtp.socketFactory.fallback", "false");

        Authenticator auth = new SMTPAuthenticator(username, password); // changed
        Session mailSession = Session.getInstance(props, auth); // changed
        mailSession.setDebug(true);

        Message mailMessage = new MimeMessage(mailSession);
        mailMessage.setFrom(new InternetAddress(fromEmail));
        mailMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(toEmail));
        mailMessage.setContent(message, "text/html");
        mailMessage.setSubject(subject);

        InternetAddress[] smtpAddress = { new InternetAddress("stmp.gmail.com") }; // changed
        Transport transport = mailSession.getTransport(smtpAddress[0]); // changed
        transport.connect();// changed

        transport.sendMessage(mailMessage, mailMessage.getAllRecipients());
        transport.close(); // added
    } catch (Exception ex) {
        Logger.getLogger(MailSenderBean.class.getName()).log(Level.SEVERE, null, ex);
    }
}

SMTPAuthenticator 类:

private class SMTPAuthenticator extends Authenticator {
    String username = null;
    String password = null;

    SMTPAuthenticator(String user, String pass) {
        username = user;
        password = pass;
    }

    public PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(username, password);
    }
}

【讨论】:

  • 首先感谢您的回复。 Authenticator auth = new SMTPAuthenticator(username, password);这一行给了我一个我不明白的错误。
  • 还有这一行: Transport transport = mailSession.getTransport(smtpAddress);我想我错过了一个我看不到的点......
  • 对不起,我忘记了 SMTPAuthenticator 类。 getTransport 方法需要 InternetAddress 参数,而不是数组 InternetAddress。
猜你喜欢
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 2011-11-09
  • 2016-10-28
  • 1970-01-01
相关资源
最近更新 更多