android - 为我自己的 GMail 帐户获取 OAuth 凭据
问题描述
我使用较旧的 JavaMail API 使用基于密码的身份验证从我的 Android 应用程序发送电子邮件。问题是我使用自己的GMail 帐户发送电子邮件(因此将电子邮件/密码存储在代码中 - 我知道这不是一个好主意)
new PasswordAuthentication(_user, _pass)
我现在已经升级到较新版本的 JavaMail,我想使用 OAuth2
implementation 'com.sun.mail:android-mail:1.6.2'
implementation 'com.sun.mail:android-activation:1.6.2'
如何为我自己的 GMail 帐户生成 OAuth 凭据并使用它们发送电子邮件?
编辑:
这是我到目前为止所尝试的:
- 在Google Console上创建了一个项目。在凭证屏幕中,创建 OAuth 客户端 ID - 选择“其他”。这给了我客户端 ID 和客户端密码
- 使用oauth2.py,使用客户端 ID 和客户端密码生成访问令牌和刷新令牌(在生产应用程序中,我打算硬编码所有 4:客户端 ID、密码、访问权限、刷新令牌并“永远”继续使用它们" 用于生成新的访问令牌)
- 使用 oauth2.py 测试了 SMTP 身份验证是否有效
修改了我用于发送邮件的 Java 代码,如下所示:
Properties props = new Properties(); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.debug", "true"); props.put("mail.smtp.port", 587); props.setProperty("mail.smtp.socketFactory.port", 587); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.auth.mechanisms", "XOAUTH2"); Session session = Session.getInstance(props); SMTPTransport transport = new SMTPTransport(session, null); transport.connect("smtp.gmail.com", _user, _accessToken); transport.sendMessage(msg, msg.getAllRecipients());
现在我得到:
java.net.UnknownHostException: mail.google.com Unknown SMTP host: smtp.gmail.com
我无法找到如何在请求上设置访问令牌。代替
transport.connect("smtp.gmail.com", _user, _accessToken);
我也试过
String auth = new String(BASE64EncoderStream.encode(String.format("user=%s\1auth=Bearer %s\1\1", _user, _accessToken).getBytes()));
transport.issueCommand("AUTH XOAUTH2 " + auth, 235);
但同样的错误。
解决方案
推荐阅读
- amazon-web-services - Cloudformation IAM 政策
- python - Why doesn't else statement work instead of if (all previous cases aren't true)?
- ruby-on-rails - 如何在 Rails 中运行特定的 AJAX 调用
- database - Redshift 真空排序默认值
- javascript - 将参数传递给节点 js API 调用?
- bigtable - Bigtable 行键场景避免热点?
- javascript - 单击 Like 按钮后重新渲染反应组件(使用 Redux)
- android - 单击 PagerAdapter 时如何显示全屏图像?
- javascript - Firebase Auth 的 onAuthStateChanged 中的 React 的 SetState 导致 setState 未定义
- php - 致命错误:无法对表达式的结果使用 isset()(您可以改用“null !== expression”))