Android Javamail自定义身份validation

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

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

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

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

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

– -编辑 – –

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

我有一个工作jar有sasl支持imap(对于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令牌成功validationgmail imap服务器,我没有尝试其他任何东西。 对于smtp,你可以在这里看看我的答案这里的Javamail api在android中使用XOauth我认为可以让smtp与Sasl一起从这里获取新类http://kenai.com/projects/javamail/sources/mercurial/show/ mail / src / main / java / com / sun / mail / smtp ,它们支持smtp的Sasl。 我认为这非常好,因为我所做的只是添加一些GPL类,我添加的是来自JDK。 希望这有帮助,如果您需要jar子或更多解释如何做,请问。

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

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

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

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