【问题标题】:JavaMail works with JBOSS Application Server 7 but not working with Tomcat7 on OpenShiftJavaMail 适用于 JBOSS Application Server 7,但不适用于 OpenShift 上的 Tomcat7
【发布时间】:2016-08-31 06:39:29
【问题描述】:
   package com.example.web;

    import java.io.*;
    import java.util.*;
    import javax.servlet.*;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.*;
    import javax.mail.*;
    import javax.mail.internet.*;
    import javax.activation.*;
    import javax.annotation.Resource;

    @WebServlet("/SendMail")
    public class SendMail extends HttpServlet {

        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {

            String host = "smtp.gmail.com";
            String from = "email";
            String pass = "password";

            Properties props = System.getProperties();
            props.put("mail.smtp.starttls.enable", "true");
            props.put("mail.smtp.host", host);
            props.put("mail.smtp.user", from);
            props.put("mail.smtp.password", pass);
            props.put("mail.smtp.port", "587");
            props.put("mail.smtp.auth", "true");
            props.put("mail.debug", "true");

            Session session = Session.getInstance(props, new GMailAuthenticator(from, pass));

            response.setContentType("text/html");
            PrintWriter out = response.getWriter();

            try {

                MimeMessage message = new MimeMessage(session);


                message.setFrom(new InternetAddress(from,"Magazin Online"));
                message.addRecipient(Message.RecipientType.TO, new InternetAddress(request.getParameter("send_to")));

                message.setSubject("Test Email");
                message.setText(request.getParameter("message"));

                // Send message
                Transport.send(message);
                out.println("message sent");
            } catch (MessagingException mex) {
                mex.printStackTrace();
            }
        }

    }

javax.mail.AuthenticationFailedException
        at javax.mail.Service.connect(Service.java:319)
        at javax.mail.Service.connect(Service.java:169)
        at javax.mail.Service.connect(Service.java:118)
        at javax.mail.Transport.send0(Transport.java:188)
        at javax.mail.Transport.send(Transport.java:118)
        at com.example.web.SendMail.doPost(SendMail.java:49)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:683)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1042)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:745)

这是用于发送电子邮件的代码。它可以在 localhost 的 Tomcat 7 上运行,但不能在 OpenShift 的 Tomcat 7 上运行。 但它确实适用于 OpenShift 上的 JBOSS Application Server 7。 有谁知道为什么会这样?

【问题讨论】:

    标签: tomcat7 openshift jakarta-mail jboss7.x


    【解决方案1】:

    您应该收到来自 Google 的邮件,上面写着 Sign-in Has Been Prevented。这将在您尝试登录 new device/application from remote location 时发生。您可能需要更新 google 安全设置才能使其正常工作。

    阅读更多this link

    【讨论】:

    • 我收到了!我使用较少的安全选项修改了安全性。这使它适用于来自 Openshift 的 JBOSS AS7 和 localhost Tomcat 7。但没有解决来自 OpenShift 的 Tomcat 7。这是谷歌思想的问题,因为我用雅虎更改了gmail服务器并且它有效。
    • @RaduBurlacu,我以前也遇到过同样的问题。我已经通过更改谷歌安全设置解决了这个问题。如果它解决了您的问题,请接受/支持答案
    • 嗨@RaduBurlacu,如果这个或任何答案解决了您的问题,请点击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
    猜你喜欢
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多