我正在使用旧的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凭据并使用它们发送电子邮件?
编辑:
这是我到目前为止尝试过的:
修改了我用于发送邮件的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);
但同样的错误。