2

所以,我意识到 SASL 没有在 android 中实现,因此 javamail oauth2 方法不会开箱即用。

但是,根据 gmail imap 的 google api 文档(https://developers.google.com/google-apps/gmail/xoauth2_protocol),获取身份验证令牌、对其进行编码并发送“AUTHENTICATE XOAUTH2”似乎相当简单' 手动发送到服务器。

我的问题:我想使用 javamail IMAP 功能(不想自己处理 IMAP 协议命令和响应),但我需要一种方法来简单地插入正确的身份验证命令 - 而不是传统的登录用户名密码。

这可以做到吗?最简单的方法是什么?我可以创建自己的身份验证方法并轻松实现吗?

或者,我可以创建连接,然后将其交给 IMAPStore(怀疑这会在它创建和管理连接池时起作用)。

- -编辑 - -

更具体地说,javax.security.sasl 方法未在 Imap.protocol.IMAPSaslAuthenticator 所依赖的 Android 中实现。

4

3 回答 3

4

我有一个支持 imap 的 sasl 工作 jar(对于 smtp,您必须按照您所说的发出命令,因为 android 的 java 邮件没有 smtp 的 sasl 基础结构)。我所做的只是将包 javax.security.sasl 和 javax.security.auth.callback 添加到用于 android 源的 java 邮件并重新打包它。我不得不将它放在不同的 namaspace 中,myjavax.security.sasl 等,因为否则 android 构建系统会抱怨该包包含核心库,不知道为什么它不抱怨 javax.mail 无论如何都在核心命名空间中( javax)。我还必须为某些类中的新命名空间更改一些导入,但基本上是packeges 类本身和com.sun.mail.imap.protocol.IMAPSaslAuthenticator。有了这个,我可以使用从 Android AccountManager 获得的 oauth 2 令牌成功地对 gmail imap 服务器进行身份验证,我没有尝试其他任何方法。对于 smtp,你可以在这里查看我的回答android中使用XOauth 的Javamail api我认为可以使smtp与Sasl一起从这里获取新类http://kenai.com/projects/javamail/sources/mercurial/show/mail/src/main/java/com/ sun/mail/smtp对 smtp 有 Sasl 支持。我认为这非常好,因为我所做的只是添加一些 GPL 类,我添加的类来自 JDK。希望这会有所帮助,如果您需要罐子或有关如何操作的更多解释,请询问。

于 2012-11-24T14:56:49.550 回答
1

如果不破解 JavaMail 类,就没有办法做到这一点。

你不能只使用用户名/密码认证吗?

于 2012-10-19T19:20:32.043 回答
0

https://java.net/projects/javamail/pages/OAuth2

从 JavaMail 1.5.5 开始,内置了对 OAuth2 身份验证的支持,不再需要 SASL

于 2016-04-25T13:07:54.247 回答