【问题标题】:Java Mail fails to authenticate smtp setting in openshift serverJava Mail 无法验证 openshift 服务器中的 smtp 设置
【发布时间】:2013-10-19 03:51:45
【问题描述】:

我编写了以下 bean 来验证我的邮件。

public class Mail_Authenticator {

   public Session Get_Auth() {
        // sets SMTP server properties
        ResourceBundle rs_mail = ResourceBundle.getBundle("mail");
        final String userName=rs_mail.getString("username");
        final String password=rs_mail.getString("password");
        Properties properties = new Properties();
        properties.put("mail.smtp.host", "smtp.gmail.com");
        properties.put("mail.smtp.port", "587");
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.starttls.enable", "true");
        properties.put("mail.user", userName);   

        //creates a new session with an authenticator
        Authenticator auth = new Authenticator() {
            @Override
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(userName, password);
            }
        };
        return (Session.getInstance(properties, auth));

    }
}

问题在于 smtp 设置,当我在本地服务器上运行应用程序时,它运行良好。但是当我在 openshift 服务器上运行应用程序时,会导致异常

Transport.send(msg);

谁能指出上述设置中的问题以及为什么它们在我的本地机器上工作?

以下是我得到的例外

javax.mail.AuthenticationFailedException: 534-5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbsWq 534-5.7.14 JJjb_c-FzrtUAccdDqOCMtsPAOL1AwIDSCoireBRoI5X-avznrYbparV84O_zkAvrHXMB9 534-5.7.14 T0Zj8zXP1g1woaWHnTzJQ3vWFn3lwTNl9Kn8Ma9-d9FPD_xB-bMBSh5FEPdaMqID4WljXW 534-5.7.14 v67IfQzXHolKlY48pEiZF-cpGc6CEgknkET1ciEQf51vQuETuMrrzeC7EDcM7s89Njtm5e 534-5.7.14 crMNRLw> Please log in via your web browser and then try again. 534-5.7.14 Learn more at https://support.google.com/mail/bin/answer.py?answer=787 534 5.7.14 54 e7sm180653184qag.7 - gsmtp

at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:823)
at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:756)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:673)
at javax.mail.Service.connect(Service.java:317)
at javax.mail.Service.connect(Service.java:176)
at javax.mail.Service.connect(Service.java:125)
at javax.mail.Transport.send0(Transport.java:194)
at javax.mail.Transport.send(Transport.java:124)
at Servlet.Mail.sendEmail(Mail.java:72)
at Servlet.Mail.doGet(Mail.java:206)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1008)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)

【问题讨论】:

  • 检查端口是否在服务器上打开,也许它已关闭?
  • 你能写出包含 msg 的整个代码吗?

标签: java email jakarta-mail


【解决方案1】:

Transport 类的静态方法是错误的,因为没有使用 Session 对象的设置。 使用示例Gmail with JavaMail

代码是这样的:

String host = "smtp.gmail.com";
String username = "user";
String password = "passwd";
Properties props = new Properties();
props.put("mail.smtps.auth", "true");
// ...
MimeMessage msg = new MimeMessage(session);
// set the message content here
Transport t = session.getTransport("smtps");
try {
t.connect(host, username, password);
t.sendMessage(msg, msg.getAllRecipients());
} finally {
t.close();
}

【讨论】:

    【解决方案2】:

    试试这个:

        Properties props = new Properties();
        props.put("mail.smtp.user", username);
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.port", "25");
        props.put("mail.debug", "true");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.EnableSSL.enable", "true");
        props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.setProperty("mail.smtp.socketFactory.fallbac k", "false");
        props.setProperty("mail.smtp.port", "465");
        props.setProperty("mail.smtp.socketFactory.port", "465");
        Session session = Session.getInstance(props,
                new javax.mail.Authenticator() {
    
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(username, password);
                    }
                });
        try {
    
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(username));
            message.setRecipients(Message.RecipientType.TO,
                    InternetAddress.parse("sENDER_EMAIL"));
            message.setSubject("SUBJECT_OF_MAIL");
            message.setText("MAIL_TEXT);
    
            Transport.send(message);
    
            System.out.println("Done");
    
        } catch (Exception e) {
    
    
        }
    

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题。尝试从浏览器登录到 gmail 帐户。如果他认为是非法访问(可能来自不同的地理位置),Gmail 会阻止身份验证请求。您可能会看到一条消息或通知。按照通知或消息中的说明,然后您可以取消阻止身份验证请求。您的身份验证将起作用。

      我使用了以下代码:

      public void sendMail(String mailId,String outputFile) {
      
          final String username = "a@gmail.com";
          final String password = "MyPassowrd";
      
          Properties props = new Properties();
          props.put("mail.smtp.host", "smtp.gmail.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 = Session.getDefaultInstance(props,
              new javax.mail.Authenticator() {
                  protected PasswordAuthentication getPasswordAuthentication() {
                      return new PasswordAuthentication(username,password);
                  }
              });
      
          try {
      
              Message message = new MimeMessage(session);
      
              message.setFrom(new InternetAddress("a@gmail.com"));
              message.setRecipients(Message.RecipientType.TO,
                  InternetAddress.parse(mailId));
              message.setSubject("MySubject");
      
              MimeBodyPart messageBodyPart =  new MimeBodyPart();
              messageBodyPart.setText("This is the mail content");
              Multipart multipart = new MimeMultipart();
              multipart.addBodyPart(messageBodyPart);
      
              messageBodyPart = new MimeBodyPart();
              DataSource source = 
                new FileDataSource(outputFile);
              messageBodyPart.setDataHandler(
                new DataHandler(source));
              messageBodyPart.setFileName("MyFile.pdf");
              multipart.addBodyPart(messageBodyPart);
      
              // Put parts in message
              message.setContent(multipart);
      
              Transport.send(message);
      
              System.out.println("Done");
      
          } catch (MessagingException e) {
              throw new RuntimeException(e);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-14
        • 2018-11-13
        • 1970-01-01
        • 1970-01-01
        • 2010-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多