javax.mail 不想从我的 Web 应用程序发送我的邮件,但它从我的控制台应用程序发送邮件

Stu076

首先我使用glassfish4服务器。当我尝试从我的网络测试应用程序发送电子邮件时,我收到一个通常说的异常:

javax.mail.MessagingException:无法连接到 SMTP 主机:mail.host.com,端口:465,响应:-1

(我也有另一个例外,但我不记得了),但是从我的 SE 应用程序中,它每次都正确发送电子邮件。此外,我的同事在他的计算机上拥有与我相同的代码,并且代码有效。我还尝试使用 smtp.gmail.com 发送电子邮件,它的工作原理很有趣,但是当我尝试使用我们的私人服务器时,它不起作用。

这是我的网络应用程序中的代码:

    @WebServlet("/email")
public class Email extends HttpServlet{
    private static final String SUBJECT = "TEST";
    private static final String CONTENT = "<h1>HI</h1>"
            + "<header style='width: 100%; height=20vh; background: #ffdd1a; color: #383e72;'>"
            + "<h1>TEST</h1>"
            + "<h2>KTHXBYE</h2>"
            + "</header>";

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String name = req.getParameter("name"),
               eMail = req.getParameter("eMail"),
               server = req.getParameter("server"),
               port = req.getParameter("port"),
               encryption = req.getParameter("encryption"),
               mailTo = req.getParameter("mailTo");
        final String username = req.getParameter("username"),
                     pass = req.getParameter("pass");
        resp.setCharacterEncoding("UTF-8");
        Session session;

        // setup acc props
        Properties props = System.getProperties();
        props.put("mail.smtp.host", server);
        props.put("mail.smtp.port", port);
        props.put("mail.smtp.auth", "true");
        props.put("mail.transport.protocol", "smtp");

        switch (povezava) {
            case "SSL":
                props.put("mail.smtp.socketFactory.port", "port");
                props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
                break;
            case "TLS":
                props.put("mail.smtp.starttls.enable", "true");
                break;
            case "NONE":
                props.put("mail.smtp.ssl.enable", "false");
                props.put("mail.smtp.starttls.enable", "false");
                props.put("mail.smtp.ssl.trust", server);
                break;
            default:
                resp.getWriter().print("ERROR");
                return;
        }

        Authenticator auth = new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, pass);
            }
        };

        // create msg
        session = Session.getDefaultInstance(props, auth);
        session.setDebug(true);

        MimeMessage message = new MimeMessage(session);
        try {
            try {
                message.setFrom(new InternetAddress(eMail, name));
                message.setSubject(SUBJECT);
                MimeMultipart multipart = new MimeMultipart("related");
                BodyPart bodyPart = new MimeBodyPart();
                bodyPart.setContent(CONTENT, "text/html; charset=utf-8");
                multipart.addBodyPart(bodyPart);
                message.setContent(multipart);
                // send msg
                message.setRecipient(Message.RecipientType.TO, new InternetAddress(mailTo));
//                Transport transport = session.getTransport("smtp");
//                transport.connect(server, username, pass);
//                transport.sendMessage(message, message.getAllRecipients());
                Transport.send(message);
                resp.getWriter().print("Mail was send successfully");
                return;
            } catch (MessagingException ex) {
                Logger.getLogger(Email.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (UnsupportedEncodingException ex) {
            Logger.getLogger(Email.class.getName()).log(Level.SEVERE, null, ex);
        }
        resp.getWriter().print("Sending mail failed");
    }
}

来自上层代码的堆栈跟踪:

javax.mail.MessagingException: Could not connect to SMTP host: mail.host.com, port: 465, response: -1
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2042)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:697)
    at javax.mail.Service.connect(Service.java:386)
    at javax.mail.Service.connect(Service.java:245)
    at javax.mail.Service.connect(Service.java:194)
    at javax.mail.Transport.send0(Transport.java:253)
    at javax.mail.Transport.send(Transport.java:124)
    at com.zarja.testmail.Email.doPost(Email.java:113)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
    at java.lang.Thread.run(Thread.java:748)

现在我的 SE 应用代码:

public static void main(String[] args) {
        System.out.println(sendMyMail());
    }

    public static String sendMyMail() {
        try {
            String from = "mailaddress"; // not actual mail
            String pass = "password";
            Authenticator auth = new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(from, pass);
                }
            };

            Session session;
            //setup account properties
            Properties props = System.getProperties();
            props.put("mail.smtp.host", "mail.host.com");
            props.put("mail.smtp.socketFactory.port", "465");
            props.put("mail.smtp.socketFactory.class",
                    "javax.net.ssl.SSLSocketFactory");
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.port", "465");

            session = Session.getDefaultInstance(props, auth);
            session.setDebug(true);
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(from, "TEST"));
            message.setSubject(SUBJECT);
            MimeMultipart multipart = new MimeMultipart("related");
            BodyPart messageBodyPart = new MimeBodyPart();
            messageBodyPart.setContent(CONTENT, "text/html; charset=utf-8");
            multipart.addBodyPart(messageBodyPart);
            message.setContent(multipart);
            //send message
            try {
                message.setRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"));
    //                Transport transport = session.getTransport("smtp");
    //                    transport.connect("mail.host.com", from, pass);
    //                    transport.sendMessage(message, message.get

AllRecipients());
                    Transport .send(message);
                    return "SENT";
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return "FAILED";
        }

我在这里先向您的帮助表示感谢!

编辑(代码应该看起来如何):

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String name = req.getParameter("name"),
               eMail = req.getParameter("eMail"),
               server = req.getParameter("server"),
               port = req.getParameter("port"),
               encryption = req.getParameter("encryption"),
               mailTo = req.getParameter("mailTo");
        final String username = req.getParameter("username"),
                     pass = req.getParameter("pass");
        resp.setCharacterEncoding("UTF-8");
        Session session;

        // setup acc props
        Properties props = System.getProperties();
        props.put("mail.smtp.host", server);
        props.put("mail.smtp.port", port);
        props.put("mail.smtp.auth", "true");
        props.put("mail.transport.protocol", "imap");

        switch (enryption) {
            case "SSL":
                props.put("mail.smtp.ssl.enable", "true");
                break;
            case "TLS":
                props.put("mail.smtp.starttls.enable", "true");
                break;
            case "NONE":
                props.put("mail.smtp.ssl.enable", "false");
                props.put("mail.smtp.starttls.enable", "false");
                props.put("mail.smtp.ssl.trust", server);
                break;
            default:
                resp.getWriter().print("ERROR");
                return;
        }

        // create msg
        session = Session.getInstance(props);
        session.setDebug(true);

        MimeMessage message = new MimeMessage(session);
        try {
            try {
                message.setFrom(new InternetAddress(eMail, name));
                message.setSubject(SUBJECT);
                MimeMultipart multipart = new MimeMultipart("related");
                BodyPart bodyPart = new MimeBodyPart();
                bodyPart.setContent(CONTENT, "text/html; charset=utf-8");
                multipart.addBodyPart(bodyPart);
                message.setContent(multipart);
                // send msg
                message.setRecipient(Message.RecipientType.TO, new InternetAddress(mailTp));
                Transport transport = session.getTransport("imap");
                transport.connect(streznikPoste, uporabniskoIme, geslo);

                Transport.send(message);
                resp.getWriter().print("Mail was send successfully");
                return;
            } catch (MessagingException ex) {
                Logger.getLogger(Email.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (UnsupportedEncodingException ex) {
            Logger.getLogger(Email.class.getName()).log(Level.SEVERE, null, ex);
        }
        resp.getWriter().print("Sending mail failed");
    }

编辑修复(这似乎有效):

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String name = req.getParameter("name"),
               eMail = req.getParameter("eMail"),
               server = req.getParameter("server"),
               port = req.getParameter("port"),
               encryption = req.getParameter("encryption"),
               mailTo = req.getParameter("mailTo");
        final String username = req.getParameter("username"),
                     pass = req.getParameter("pass");
        resp.setCharacterEncoding("UTF-8");
        Session session;

        // setup acc props
        Properties props = System.getProperties();
        props.put("mail.smtp.host", server);
        props.put("mail.smtp.port", port);
        props.put("mail.smtp.auth", "true");
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.smtp.ssl.trust", server);

        switch (encryption) {
            case "SSL":
                props.put("mail.smtp.ssl.enable", "true");
                break;
            case "TLS":
                props.put("mail.smtp.starttls.enable", "true");
                break;
            case "NONE":
                props.put("mail.smtp.ssl.enable", "false");
                props.put("mail.smtp.starttls.enable", "false");
                props.put("mail.smtp.ssl.trust", server);
                break;
            default:
                resp.getWriter().print("ERROR");
                return;
        }

        // create msg
        session = Session.getInstance(props);
        session.setDebug(true);

        MimeMessage message = new MimeMessage(session);
        try {
            try {
                message.setFrom(new InternetAddress(eMail, name));
                message.setSubject(SUBJECT);
                MimeMultipart multipart = new MimeMultipart("related");
                BodyPart bodyPart = new MimeBodyPart();
                bodyPart.setContent(CONTENT, "text/html; charset=utf-8");
                multipart.addBodyPart(bodyPart);
                message.setContent(multipart);
                // send msg
                message.setRecipient(Message.RecipientType.TO, new InternetAddress(mailTo));
                Transport transport = session.getTransport();
                transport.connect(server, username, pass);
                Transport.send(message, username, pass);
                resp.getWriter().print("Mail was send successfully");
                return;
            } catch (MessagingException ex) {
                Logger.getLogger(Email.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (UnsupportedEncodingException ex) {
            Logger.getLogger(Email.class.getName()).log(Level.SEVERE, null, ex);
        }
        resp.getWriter().print("Sending mail failed");
    }
比尔香农

首先,修复所有这些常见的 JavaMail 错误

如果您可以连接到一台远程服务器但不能连接到另一台远程服务器,则说明您对该服务器的配置有误,或者您的防火墙阻止了连接。JavaMail FAQ提供了调试连接问题的技巧

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

原始HTML通过我的Web应用程序发送

来自分类Dev

Web应用程序:我应该发送回给用户什么?

来自分类Dev

发送电子邮件不起作用使用heroku应用程序的Sendgrid和mail_form。我在Contacts#create中收到NoMethodError

来自分类Dev

我正在尝试通过我的Web应用程序向用户发送电子邮件。但是电子邮件发送已被gmail阻止。有什么解决办法吗?

来自分类Dev

使用我的应用程序快速书籍将请求发送到Web连接器

来自分类Dev

发送匿名请求到我们的Web应用程序

来自分类Dev

每当我关闭我的应用程序时,电子邮件都会成功发送

来自分类Dev

Heroku应用程序不打印我发送给它的响应,它仅打印控制台日志

来自分类Dev

从我的应用程序启动Mail.app

来自分类Dev

我怎么知道从ADFS发送到我的Web应用程序的令牌的格式是什么?

来自分类Dev

我可以使用 vs2019 将控制台应用程序容器化到 ACR 中吗,似乎只有 dotnetcore Web 应用程序可以工作

来自分类Dev

从我自己的应用程序启动Mail应用程序(iOS)

来自分类Dev

从AngularJS Web应用程序发送电子邮件

来自分类Dev

使用Java从动态Web应用程序发送邮件

来自分类Dev

设置exim4以从Web应用程序发送邮件

来自分类Dev

为什么我的Heroku应用程序不使用Sendgrid发送生产中的电子邮件?

来自分类Dev

如何从我的应用程序发送带有下划线或粗体字的邮件?

来自分类Dev

grails应用程序不再允许我在本地主机上发送电子邮件

来自分类Dev

通过电子邮件从我的应用程序发送多个递增的csv

来自分类Dev

我的邮件发送应用程序应该模仿它的用户域吗?

来自分类Dev

当我尝试使用轮询邮件程序插件读取我的收件箱并触发构建时,jenkins 中会抛出 javax.mail.messaging 异常连接超时错误

来自分类Dev

我自己的应用程序发送按钮

来自分类Dev

我想在我的Angular Web应用程序中使用Azure应用程序服务的``应用程序设置''变量

来自分类Dev

Zapier:如何使用 Zapier 从 ScheduleOnce 将数据发送到我的 Node.js Web 应用程序

来自分类Dev

为什么我的应用程序只发送一封电子邮件,然后又发送不了?

来自分类Dev

使用javax.mail与ssl发送电子邮件

来自分类Dev

javax.mail.AuthenticationFailedException:如何无法通过Java发送邮件?

来自分类Dev

如何获取我的Web应用程序的实时数据?

来自分类Dev

我的Java Web应用程序中的ClassNotFoundException / NoClassDefFoundError

Related 相关文章

  1. 1

    原始HTML通过我的Web应用程序发送

  2. 2

    Web应用程序:我应该发送回给用户什么?

  3. 3

    发送电子邮件不起作用使用heroku应用程序的Sendgrid和mail_form。我在Contacts#create中收到NoMethodError

  4. 4

    我正在尝试通过我的Web应用程序向用户发送电子邮件。但是电子邮件发送已被gmail阻止。有什么解决办法吗?

  5. 5

    使用我的应用程序快速书籍将请求发送到Web连接器

  6. 6

    发送匿名请求到我们的Web应用程序

  7. 7

    每当我关闭我的应用程序时,电子邮件都会成功发送

  8. 8

    Heroku应用程序不打印我发送给它的响应,它仅打印控制台日志

  9. 9

    从我的应用程序启动Mail.app

  10. 10

    我怎么知道从ADFS发送到我的Web应用程序的令牌的格式是什么?

  11. 11

    我可以使用 vs2019 将控制台应用程序容器化到 ACR 中吗,似乎只有 dotnetcore Web 应用程序可以工作

  12. 12

    从我自己的应用程序启动Mail应用程序(iOS)

  13. 13

    从AngularJS Web应用程序发送电子邮件

  14. 14

    使用Java从动态Web应用程序发送邮件

  15. 15

    设置exim4以从Web应用程序发送邮件

  16. 16

    为什么我的Heroku应用程序不使用Sendgrid发送生产中的电子邮件?

  17. 17

    如何从我的应用程序发送带有下划线或粗体字的邮件?

  18. 18

    grails应用程序不再允许我在本地主机上发送电子邮件

  19. 19

    通过电子邮件从我的应用程序发送多个递增的csv

  20. 20

    我的邮件发送应用程序应该模仿它的用户域吗?

  21. 21

    当我尝试使用轮询邮件程序插件读取我的收件箱并触发构建时,jenkins 中会抛出 javax.mail.messaging 异常连接超时错误

  22. 22

    我自己的应用程序发送按钮

  23. 23

    我想在我的Angular Web应用程序中使用Azure应用程序服务的``应用程序设置''变量

  24. 24

    Zapier:如何使用 Zapier 从 ScheduleOnce 将数据发送到我的 Node.js Web 应用程序

  25. 25

    为什么我的应用程序只发送一封电子邮件,然后又发送不了?

  26. 26

    使用javax.mail与ssl发送电子邮件

  27. 27

    javax.mail.AuthenticationFailedException:如何无法通过Java发送邮件?

  28. 28

    如何获取我的Web应用程序的实时数据?

  29. 29

    我的Java Web应用程序中的ClassNotFoundException / NoClassDefFoundError

热门标签

归档