当前位置: 首页 > 知识库问答 >
问题:

openshift上java邮件程序认证错误

宗晟
2023-03-14

我正在尝试使用Java Mail API发送邮件

final String username = "myusername@gmail.com";
final String password = "mypassword";
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.fallback", "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(clientEmail));
    message.setSubject(subject);
    message.setText("Dear "+clientName+",\n\n  "+body);

    Transport.send(message);
} catch (MessagingException e) {
    throw new RuntimeException(e);
}

它在本地运行完美,但在Openshift上提供AuthenticationFailedException。下面是openshift错误日志。

DEBUG: JavaMail version 1.4.7
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Orcle], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle],com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle]}
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]}
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL false 220 mx.google.com       ESMTP k9sm38376122qaj.7 - gsmtp
DEBUG SMTP: connected to host "smtp.gmail.com", port: 465 EHLO ex-std-node454.prod.rhcloud.com 250-mx.google.com at your service, [54.166.173.168] 250-SIZE 35882577 250-8BITMIME 250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-CHUNKING 250 SMTPUTF8
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENT TOKEN"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "CHUNKING", arg ""
DEBUG SMTP: Found extension "SMTPUTF8", arg ""
DEBUG SMTP: STARTTLS requested but already using SSL
DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM
DEBUG SMTP: AUTH LOGIN command trace suppressed
http://mooark-romitchhabra.rhcloud.com/mooark/ADP/Thanks.jsp
DEBUG SMTP: AUTH LOGIN failed
Exception in thread "Thread-4" java.lang.RuntimeException: javax.mail.AuthenticationFailedException: 534-5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbvrd
534-5.7.14 sdnRpIjv6joT7_WeGn1AAxAwQL6nET1nfNhi7oUeKqgdxHVmsc5XgZ4UFD26KJ0PfVSnLO
534-5.7.14 m6C8BUAB5Xk3Yp0L5Is0c0mUcP5MQMA4exuzGXiaBe0zPxMtfRLPz_y8shSO0WwDwjsV6D
534-5.7.14 ZP5fRWHRtbMDoI0hx81GBM59dc7tAM4nSsbTl1J3MoQfzeaK3_WYZ-BLtUl28P-qgcSkd
534-5.7.14 eZMQKxw> Please log in via your web browser and then try again.
534-5.7.14 Learn more at
534 5.7.14 https://support.google.com/mail/bin/answer.py?answer=78754 k9sm38376122qaj.7 - gsmtp
    at com.adp.thread.SendMail.run(SendMail.java:89)
Caused by: javax.mail.AuthenticationFailedException: 534-5.7.14    <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbvrd
534-5.7.14 sdnRpIjv6joT7_WeGn1AAxAwQL6nET1nfNhi7oUeKqgdxHVmsc5XgZ4UFD26KJ0PfVSnLO
534-5.7.14 m6C8BUAB5Xk3Yp0L5Is0c0mUcP5MQMA4exuzGXiaBe0zPxMtfRLPz_y8shSO0WwDwjsV6D
534-5.7.14 ZP5fRWHRtbMDoI0hx81GBM59dc7tAM4nSsbTl1J3MoQfzeaK3_WYZ-BLtUl28P-qgcSkdh
534-5.7.14 eZMQKxw> Please log in via your web browser and then try again.
534-5.7.14 Learn more at
534 5.7.14 https://support.google.com/mail/bin/answer.py?answer=78754 k9sm38376122qaj.7 - gsmtp
    at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:826)
    at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:761)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:685)
    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 com.adp.thread.SendMail.run(SendMail.java:85)

另一种解决方案:我尝试了Mailgun,而不是Gmail SMTP,它公开了其API以REST服务的形式发送邮件。对于开发人员来说,这是免费的,使用免费帐户可以发送的邮件数量有上限。它在Openshift上工作得非常好。在这里,我创建了一个使用Jersey 2的Mailgun服务的示例。x。https://gist.github.com/chhabraromit/0c0a16545dd31f471332

共有2个答案

潘学民
2023-03-14

Gmail真的希望您从运行应用程序的同一台机器上的浏览器登录。当您的应用程序在openshift上运行时,这是不可能的。

您可以尝试在运行浏览器的同一台机器上运行您的应用程序,看看这是否会让Gmail相信您的应用程序也可以从其他机器登录。

齐昊焱
2023-03-14

原因:谷歌正在阻止来自未知位置的访问(应用程序正在生产)

解决方案:转到http://www.google.com/accounts/DisplayUnlockCaptcha并单击继续(这将授予注册新应用程序10分钟的访问权限)。在此之后,我的生产中的应用程序开始发送电子邮件;)

 类似资料:
  • 我试图掌握Java邮件API和TLS的基本原理。我有以下情况: 有一个使用TLS的STMP服务器 然后我尝试在另一台机器上运行一个web服务器,它使用前面提到的SMTP服务器发送邮件。我还是想发TLS 我发现很多人都有类似的问题,但我的问题是: 考虑到前面描述的场景,我是否必须向web服务器(可能在JRE中的某个地方)获取某种证书,还是因为邮件服务器已经有了该证书,它就可以正常工作 我对JavaM

  • 主要内容:创建用户,登录,注销在本章中,我们将向您介绍如何使用Firebase电子邮件/密码身份验证。在开始之前,需要设置登录方法,参考以下图所示 - 点击设置登录方法,然后选择电子邮件地址/密码,打开启用并保存,如下图所示 - 创建用户 要验证用户,可以使用方法。 示例 让我们来看看下面的一个例子。参考代码 - 接下来,您可以检查Firebase仪表板中的数据库,并查看用户是否已创建成功。如下所示,已经创建了一个用户账号 -

  • 我正在做一个学校项目,我试图在创建帐户时发送一封验证电子邮件,但我不断收到一个身份验证错误,即使我的凭据是正确的。 错误日志: 我尝试了几种不同的身份验证器,但似乎都不起作用!谢谢!

  • 任务清理(类型:Delete){Delete RootProject.BuildDir}

  • 有问题的电子邮件是这样的:

  • 我正在构建守护程序应用程序,这些应用程序读取邮箱并将票证问题转换为我们的应用程序。此应用程序将使用OAuth2通过IMAP/POP3协议连接到M365邮件服务器进行身份验证。我使用MailKit获取电子邮件。默认情况下,它支持OAuth2。它只需要访问令牌作为密码替换。我做了什么 使用此指南注册应用程序。具有以下详细信息 我选择生成客户端密码而不是使用证书 其余的不变。 我尝试了不同类型的作用域,