为我自己的GMail帐户获取OAuth凭据

时间:2019-03-28 07:08:45

标签: android javamail

我正在使用旧的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凭据并使用它们发送电子邮件?


编辑:

这是我到目前为止尝试过的:

  1. Google Console上创建了一个项目。在“凭据”屏幕中,创建OAuth客户端ID-选择“其他”。这给了我客户ID和客户机密
  2. 使用oauth2.py,使用客户端ID和客户端密钥来生成访问令牌和刷新令牌(在生产应用中,我打算对所有4种硬编码:客户端ID,密钥,访问权限,刷新令牌和继续“永远”使用它们来生成新的访问令牌)
  3. 测试了使用oauth2.py进行的SMTP身份验证
  4. 修改了我用于发送邮件的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);

但同样的错误。

0 个答案:

没有答案