通过 SMTP 发送邮件 Gmail Oauth2 问题

2023-12-14

我可以通过以下方式对 SMTP 进行身份验证谷歌的例子.

但现在的问题是我无法发送邮件。每当我尝试发送邮件时,都会收到以下错误。

com.sun.mail.smtp.SMTPSendFailedException: 530-5.5.1 Authentication Required. Learn more at
530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 f5sm19578172pav.22

    at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2114)
    at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1618)
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1119)
    at javax.mail.Transport.send0(Transport.java:195)
    at javax.mail.Transport.send(Transport.java:124)

首先,我无法连接到本地主机,因此我在会话属性中添加了几行代码,如下所示的 OAuth2Authenticator 类,仍然成功验证。但无法发送邮件。

props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");

我正在使用相同的会话对象和 SMTP 传输对象当我第一次成功验证时,将从 OAuth2Authenticator 类返回。

            Message message = new MimeMessage(session);


        message.setFrom(new InternetAddress(msg.getFrom()));
        message.setRecipients(Message.RecipientType.TO,
            InternetAddress.parse(msg.getTo()));
        message.setSubject(msg.getSubject());
        message.setText(msg.getBody());

        transport.send(message);

完整的调试日志

DEBUG: setDebug: JavaMail version 1.4.5
DEBUG SMTP: enable SASL
DEBUG SMTP: useEhlo true, useAuth false
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 587, isSSL false
220 mx.google.com ESMTP gj1sm1027169pbc.11 - gsmtp
DEBUG SMTP: connected to host "smtp.gmail.com", port: 587

EHLO E6410-PC
250-mx.google.com at your service, [202.xxx.xxx.xxx]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250 ENHANCEDSTATUSCODES
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
STARTTLS
220 2.0.0 Ready to start TLS
EHLO E6410-PC
250-mx.google.com at your service, [202.xxx.xxx.xxx]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2
250 ENHANCEDSTATUSCODES
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH XOAUTH2"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Authenticate with SASL
DEBUG SMTP: SASL mechanisms allowed: XOAUTH2
DEBUG SMTP: SASL AUTH command trace suppressed
DEBUG SMTP SASL: Mechanisms: XOAUTH2
DEBUG SMTP SASL: SASL client XOAUTH2
DEBUG SMTP SASL: callback length: 1
DEBUG SMTP SASL: callback 0: javax.security.auth.callback.NameCallback@100ab23
DEBUG SMTP SASL: no response
Successfully authenticated to SMTP.
NOOP
250 2.0.0 OK gj1sm1027169pbc.11 - gsmtp
Is SMTP still connected: true
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: enable SASL
DEBUG SMTP: useEhlo true, useAuth false
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 587, isSSL false
220 mx.google.com ESMTP az8sm1466819pab.3 - gsmtp
DEBUG SMTP: connected to host "smtp.gmail.com", port: 587

EHLO E6410-PC
250-mx.google.com at your service, [202.xxx.xxx.xxx]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250 ENHANCEDSTATUSCODES
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
STARTTLS
220 2.0.0 Ready to start TLS
EHLO E6410-PC
250-mx.google.com at your service, [202.xxx.xxx.xxx]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2
250 ENHANCEDSTATUSCODES
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH XOAUTH2"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: use8bit false
MAIL FROM:<[email protected]>
530-5.5.1 Authentication Required. Learn more at
530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 az8sm1466819pab.3 - gsmtp
DEBUG SMTP: got response code 530, with response: 530-5.5.1 Authentication Required. Learn more at
530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 az8sm1466819pab.3 - gsmtp

RSET
250 2.1.5 Flushed az8sm1466819pab.3 - gsmtp
DEBUG SMTP: MessagingException while sending
com.sun.mail.smtp.SMTPSendFailedException: 530-5.5.1 Authentication Required. Learn more at
530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 az8sm1466819pab.3 - gsmtp

    at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2114)
    at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1618)
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1119)
    at javax.mail.Transport.send0(Transport.java:195)

编辑: 我现在像这样明确调用 AUTH 命令。

 byte[] response = String.format("user=%s\1auth=Bearer %s\1\1",
                    emailAddress, accessToken.getToken()).getBytes();
            response = BASE64EncoderStream.encode(response);
            System.out.println("token check : " + new String(response));

            transport.issueCommand("AUTH XOAUTH2 " + new String(response), 235);

但反应还是一样。

DEBUG: setDebug: JavaMail version 1.4.5
DEBUG SMTP: enable SASL
DEBUG SMTP: useEhlo true, useAuth false
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 587, isSSL false
220 mx.google.com ESMTP kl3sm6965596pbc.15 - gsmtp
DEBUG SMTP: connected to host "smtp.gmail.com", port: 587

EHLO E6410-PC
250-mx.google.com at your service, [xxx.xxx.xxx.xxx]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250 ENHANCEDSTATUSCODES
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
STARTTLS
220 2.0.0 Ready to start TLS
EHLO E6410-PC
250-mx.google.com at your service, [xxx.xxx.xxx.xxx]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2
250 ENHANCEDSTATUSCODES
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH XOAUTH2"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
Successfully authenticated to SMTP.
token check : abcdefgFuYUBnbWFpbC5jb20BYXV0aD1CZWabcdefgSEVTNlpUVlFTUXZfblZfZ01FaDF6WWtSQ2kzb1d5RElFQ19mb2NmWG5Sam93RUlBYVJRTldfNwEB
AUTH XOAUTH2 abcdefgFuYUBnbWFpbC5jb20BYXV0aD1CZWabcdefgSEVTNlpUVlFTUXZfblZfZ01FaDF6WWtSQ2kzb1d5RElFQ19mb2NmWG5Sam93RUlBYVJRTldfNwEB
235 2.7.0 Accepted
NOOP
250 2.0.0 OK kl3sm6965596pbc.15 - gsmtp
Is SMTP still connected: true
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: enable SASL
DEBUG SMTP: useEhlo true, useAuth false
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 587, isSSL false
220 mx.google.com ESMTP vo6sm6969236pbc.8 - gsmtp
DEBUG SMTP: connected to host "smtp.gmail.com", port: 587

EHLO E6410-PC
250-mx.google.com at your service, [xxx.xxx.xxx.xxx]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250 ENHANCEDSTATUSCODES
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
STARTTLS
220 2.0.0 Ready to start TLS
EHLO E6410-PC
250-mx.google.com at your service, [xxx.xxx.xxx.xxx]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2
250 ENHANCEDSTATUSCODES
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH XOAUTH2"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: use8bit false
MAIL FROM:<[email protected]>
530-5.5.1 Authentication Required. Learn more at
530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 vo6sm6969236pbc.8 - gsmtp
DEBUG SMTP: got response code 530, with response: 530-5.5.1 Authentication Required. Learn more at
530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 vo6sm6969236pbc.8 - gsmtp

RSET
250 2.1.5 Flushed vo6sm6969236pbc.8 - gsmtp
DEBUG SMTP: MessagingException while sending
com.sun.mail.smtp.SMTPSendFailedException: 530-5.5.1 Authentication Required. Learn more at
530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 vo6sm6969236pbc.8 - gsmtp

    at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2114)
    at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1618)
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1119)
    at javax.mail.Transport.send0(Transport.java:195)
    at javax.mail.Transport.send(Transport.java:124)

QUIT
221 2.0.0 closing connection vo6sm6969236pbc.8 - gsmtp
com.sun.mail.smtp.SMTPSendFailedException: 530-5.5.1 Authentication Required. Learn more at
530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 vo6sm6969236pbc.8 - gsmtp

    at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2114)
    at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1618)
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1119)
    at javax.mail.Transport.send0(Transport.java:195)
    at javax.mail.Transport.send(Transport.java:124)

抱歉各位,答案在这里:Android 中使用 XOauth 的 Javamail api我测试过,有效。

“短信样式登录”失败 - 具有两步登录功能的安全帐户(通过电话短信)拒绝通过 SMTP 发送电子邮件(原始密码和 OAuth 样式均因身份验证错误而失败)。他们会让您创建 OAuth 令牌,但不会发送电子邮件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 SMTP 发送邮件 Gmail Oauth2 问题 的相关文章

  • 外部硬件指纹扫描仪和 Android 设备集成

    我想建立一个android像员工考勤这样的应用程序使用fingerprint scanner 我想知道 是否可以使用外部硬件设备进行指纹识别 扫描 如何将Android应用程序与外部硬件finger集成 打印扫描设备 如何从外部硬件设备获取
  • 将图像作为 JPanel 的背景

    我是 Java 新手 目前正在创建一个带有图形的游戏 我有这个课程从JFrame 在这个班级里 我有很多JPanel需要图像作为背景 据我所知 为了能够在 JPanel 中绘制图像 我需要一个从 JPanel 扩展的单独的类以及该类的pai
  • 编写潜在并发问题的证明

    我正在阅读 Java 并发实践 并尝试编写一段代码来表明第 3 5 1 章中作为示例提供的类确实会引入问题 public class Holder public int n public Holder int n this n n publ
  • 由于保存之前/之后的 CSV 差异而导致错误解析(Java w/ Apache Commons CSV)

    我有一个 37 列的 CSV 文件 我正在使用 Apache Commons CSV 1 2 在 Java 中解析该文件 我的设置代码如下 initialize FileReader object FileReader fileReader
  • 使用祖父母接口的默认方法

    我完全不明白为什么这行不通 interface Test default void doMagic System out println Abracadabra class TestImpl implements Test class Sp
  • 确定范围是否重叠

    给定两个具有整数开始时间和结束时间的事件 E1 s1 e1 E2 s2 e2 实现快速布尔检查以查看事件是否重叠 我有解决方案 但我很想看看其他人想出了什么 编辑 好的 这是我的解决方案 e1 gt s2 s1 gt s2 e2 lt s1
  • Android 中的 ImageView 拖动限制

    我在布局中有一个 ImageView 并在 ImageView 上设置 OnTouchListener 来拖动 ImageView 它工作得很好 我的问题是如何防止将 ImageView 移动到布局范围之外 这是我的代码 活动类别 publ
  • Android - Firebase - 保存新数据而不覆盖旧数据

    创建此问题是因为我之前的问题包含 2 个问题 而不是将其缩小到 1 Aim 用户将能够存储新数据而不会覆盖之前提交的数据 描述 目前 当用户输入新报告时 事件报告节点中的用户事件报告数据将被覆盖 用户发送的旧事件报告中的数据应与新数据一起保
  • Spring Boot 是否支持服务器名称指示(SNI)?

    Spring Boot 是否支持服务器名称指示 SNI 具体来说 运行嵌入式 Tomcat 服务器并打包为可执行 jar 文件的 Spring Boot 2 2 2 RELEASE 应用程序是否可以根据传入请求的主机名支持多个 SSL 证书
  • 如何使用 apache commons cli 指定多个选项?

    我想要这样的东西 java programName jobs1 C 10 W 20 java programName job2 java programName job3 含内容 Option o1 new Option job2 some
  • 如何正确安装mysqlconnecter java?

    上网冲浪后 我意识到我应该在系统环境变量中设置类路径连接器 jar 文件的路径文件我这样做了 并在命令行中输入此命令我有这个 C Users User gt echo classpath D classpath mysql connecto
  • 关于 mongodb java 驱动程序的困惑[重复]

    这个问题在这里已经有答案了 我是 MongoDB 的初学者 我正在使用 JAVA 驱动程序来使用它 我有以下代码 MongoClient client new MongoClient DB d client getDB world DBCo
  • 与 Java 中的同步块相比,新的 Lock 接口有什么优势?

    与 Java 中的同步块相比 新的 Lock 接口有什么优势 您需要实现一个高性能缓存 允许多个读取器但单个写入器保持完整性 您将如何实现它 锁的优点是 让他们公平是可能的 可以使线程在等待 Lock 对象时响应中断 可以尝试获取锁 但如果
  • 带有 CONTAINS 查询的PreparedStatement

    我有一个查询需要连续运行 28000 次 所以我认为使用准备好的语句可能是一个聪明的主意 这是我的查询 String requestWithFirstName SELECT SE ELEMENT ID SE LASTNAME SE FIRS
  • 如何在 Spring Boot 中访问 application.properties 文件中定义的值

    我想访问中提供的值application properties e g logging level org springframework web DEBUG logging level org hibernate ERROR loggin
  • java:验证 GUI 中的所有文本字段是否已完成

    我正在尝试创建一个允许某人设置帐户的 GUI 我想验证按下创建帐户按钮时所有文本字段是否完整 做这个的最好方式是什么 我正在附加我的代码 但我对文本字段是否完整的验证不起作用 参见下面的代码 public class GUIaccounts
  • 使用 System.currentTimeMillis() 每秒运行一次代码

    我试图使用 System currentTimeMillis 每秒运行一行代码 代码 while true long var System currentTimeMillis 1000 double var2 var 2 if var2 1
  • 如何为 Weblogic 10.3.6 启用 Java 持久性 2.0

    我正在使用 eclipse 和 weblogic 服务器 为了将项目添加到 weblogic 服务器 它需要支持 Java Persistance 2 0 但是当尝试安装它时 我不断收到此消息 在 Weblogic Server 安装中启用
  • 在同一项目上使用 Eclipse 和 NetBeans

    Eclipse 是一个非常棒的编辑器 我更喜欢使用它 但是缺少 Eclipse 的 GUI 设计工具 另一方面 NetBeans 非常适合 GUI 设计 在同一项目中使用 NetBeans 进行 GUI 设计和 Eclipse 进行其他所有
  • 在 Eclipse Testrunner 中使用名称的 ParameterizedTest

    当您使用 Eclipse TestRunner 运行 JUnit 4 ParameterizedTest 时 图形表示相当愚蠢 对于每个测试 您都有一个名为 0 1 ETC 是否可以进行测试 0 1 等显式名称 实施一个toString测试

随机推荐

  • Tkinter:创建任意数量的按钮/小部件

    所以 我有一个包含如下所示条目的列表 Option1 Placeholder1 2 Placeholder2 0 Option2 Placeholder1 4 Option3 Placeholder1 2 Placeholder2 2 Pl
  • 将 PHP 变量传递给 Javascript/jquery [重复]

    这个问题在这里已经有答案了 到目前为止我知道两种将 php 变量传递给 javascript 的方法 一种是通过使用
  • 从现有表创建表(结构)

    如何创建新表 其结构应与另一个表相同 I tried CREATE TABLE dom AS SELECT FROM dom1 WHERE 1 2 但发生了它不工作的错误 Try Select Into
  • iFrame 由于协议、域和端口必须匹配而被阻止

    我收到以下错误 阻止了具有原点的帧https
  • 对于繁重的计算,Fortran 是否比 C 更容易优化?

    我时不时地读到 对于繁重的计算 Fortran 比 C 更快或者可以更快 这是真的吗 我必须承认我对Fortran几乎不了解 但是到目前为止我所看到的Fortran代码并没有表明该语言具有C所没有的功能 如果是真的 请告诉我原因 请不要告诉
  • mysql 搜索不带空格

    我的数据库中有一个名称列表 我必须找到在 url 中传递的名称的 id 我的问题是 我在 url 中传递的名称中不会有空格 而保存的记录将在数据库中 当我搜索数据库时 我没有找到任何记录 例如 数据库记录是 我的名字 而我将在 url 中传
  • 原型中的对象作为引用继承

    我想使用原型继承新的对象实例 测试用例 var MyObj function MyObj prototype objName I want this to be a different object for each instance of
  • Java 如何决定何时导入?

    为什么Java不需要导入Integer String等类 而需要导入其他类 有一个隐含的导入java lang 来自Java规范 编译单元自动访问其包中声明的所有类型 并自动导入预定义包中声明的所有公共类型java lang
  • 在验证属性时将两个正则表达式合并为一个

    我有两个正则表达式 RegularExpression ErrorMessage Something 验证仅包含空格的字符串 不包含任何其他字符 前任 length 7 RegularExpression ErrorMessage some
  • 在 Powershell 电子邮件中设置 HTML 字体颜色

    我有一个 powershell 脚本 将为密码将在 这是我当前正在使用的代码 我还要补充一点 这是我第一次尝试在 powershell 中编写脚本 因此如果我长期做事 我会接受一些输入 Import ActiveDirectory modu
  • 使用 Inno Setup 安装的应用程序的 Windows 10 开始图标上下文菜单中缺少卸载选项

    我使用 Inno Setup 5 5 9 创建了一个安装文件 然后在 Windows 10 计算机上运行该文件 我唯一的问题与卸载程序有关 我可以使用控制面板来卸载 但是在 开始 菜单中 当我右键单击启动程序的快捷方式时 上下文菜单中没有选
  • pyenchant 在 Mac OS X 上找不到字典文件

    我在运行 Lion 的 MacbookPro 上安装 pyenchant 时遇到问题 我使用 homebrew 和 pip 来安装 enchant 和 pyenchant 自制安装附魔 pip 安装 pyenchant 我还下载了一本英语词
  • 使用乔达时间将一个时区转换为另一时区

    有一个表格有一个国家 地区下拉菜单 用户将选择国家 地区 然后有一个时区下拉菜单 用户将选择用户选择的国家 地区可用的时区 然后用户将输入本地日期 例如 2014 年 12 月 26 日 和时间 23 11 24 小时时间 此输入的日期和时
  • OpenSSL 的链接错误[重复]

    这个问题在这里已经有答案了 我已经安装了 OpenSSL 我只想使用 OpenSSL 运行一个程序 这是我的程序 摘自here include
  • jQuery 对象:缓存还是不缓存?

    我的 Javascript JS 代码遇到了一些麻烦 因为有时我需要在同一个函数中多次访问相同的 DOM 元素 还提供了一些推理here 从性能的角度来看 是一次性创建一个 jQuery 对象然后缓存它更好 还是随意创建同一个 jQuery
  • 使用 LINQ 从两个列表中选择不同的元素?

    List
  • 在 WPF 中使用图片或图标代替 DataGridCheckBoxColumn

    我想在选中时将 DataGridColumn 内部的复选框更改为图像 在未选中时将其更改为图像 我该怎么办 Ps 我的DataGridCheckBoxColumn定义如下
  • PyQT4 WheelEvent?如何检测车轮是否被使用过?

    我想在 PyQT 中找出如何设置鼠标滚轮事件 我需要它 以便我可以将其附加到 Qscroll 区域 我使用的代码工作正常 但大小是硬编码的 我需要它以某种方式动态调整 具体取决于滚轮 鼠标上 的使用方式 就像我向上滑动鼠标滚轮时一样 我的框
  • 限制选中的复选框数量

    我有一个带有几个复选框的表单 我的表单中有三类复选框 我需要限制最多三个复选框per类别 我使用了这个脚本 但它限制每个表单三个复选框 jQuery function var max 3 var checkboxes jQuery inpu
  • 通过 SMTP 发送邮件 Gmail Oauth2 问题

    我可以通过以下方式对 SMTP 进行身份验证谷歌的例子 但现在的问题是我无法发送邮件 每当我尝试发送邮件时 都会收到以下错误 com sun mail smtp SMTPSendFailedException 530 5 5 1 Authe