Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Javamail自定义身份验证_Java_Android_Oauth 2.0_Jakarta Mail - Fatal编程技术网

Android Javamail自定义身份验证

Android Javamail自定义身份验证,java,android,oauth-2.0,jakarta-mail,Java,Android,Oauth 2.0,Jakarta Mail,因此,我意识到SASL不是在android中实现的,因此javamail oauth2方法不会开箱即用 然而,根据gmailimap()的googleapi文档,获取auth令牌、对其进行编码并手动将“AUTHENTICATE XOAUTH2”发送到服务器似乎相当简单 我的问题是:我想使用javamail IMAP函数(我自己不想处理IMAP协议命令和响应搜索),但我需要一种方法来简单地插入正确的身份验证命令,而不是传统的登录用户名密码 这可以做到吗?最简单的方法是什么?我可以创建自己的身份验证

因此,我意识到SASL不是在android中实现的,因此javamail oauth2方法不会开箱即用

然而,根据gmailimap()的googleapi文档,获取auth令牌、对其进行编码并手动将“AUTHENTICATE XOAUTH2”发送到服务器似乎相当简单

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

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

或者,我可以创建连接,然后将其交给IMAPStore(在创建和管理连接池时,我怀疑这是否有效)

---编辑---


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

如果不破解JavaMail类,就无法实现这一点


您不能只使用用户名/密码身份验证吗?

我有一个支持imap的sasl的工作jar(对于smtp,您必须像您所说的那样发出命令,因为android版java mail没有用于smtp的sasl基础设施)。 我所做的只是将包javax.security.sasl和javax.security.auth.callback添加到java mail for android源代码中,并重新打包。我不得不把它放在另一个namaspace中,myjavax.security.sasl等,因为否则android构建系统会抱怨包中包含核心库,不知道为什么它不会抱怨javax.mail,因为它无论如何都在一个核心名称空间(javax)中。我还必须在一些类中更改新名称空间的导入,但基本上是packeges类本身和com.sun.mail.imap.protocol.IMAPSaslAuthenticator。 有了这个,我可以使用从Android AccountManager获得的oauth 2令牌成功地对gmail imap服务器进行身份验证,我没有做任何其他尝试。对于smtp,您可以在这里查看我的答案 我认为可以让smtp与Sasl一起工作,从这里获得新的类,这些类具有对smtp的Sasl支持。 我认为这很好,因为我所做的只是添加一些GPL类,我添加的那个类来自JDK。 希望这能有所帮助,如果您需要罐子或更多关于如何操作的解释,请询问。

来自:

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


好吧,这就是我害怕的。我可以使用用户名/密码,但如果可能的话,我更愿意使用令牌,这样用户就不必在我的应用程序中输入他们的凭据,只要在我第一次请求令牌时“批准”即可……Mhhh我注意到检查来源,我下面回答中的解决方案可能是许可证中每个类路径异常的Oracle许可问题。基本上,按照我的理解,名称空间应该保持javax.*。如果是这样,有可能让android停止抱怨核心类吗?毕竟,它并不抱怨android的java邮件“端口”中的javax.mail。我认为Bill Shannon应该能够回答这个问题:p,刚刚注意到你的名字以及我在查看的源代码:我不知道Android抱怨哪些类以及为什么。可惜它不是真正的Java,是吗?;-)我不记得classpath异常说明了javax.*,但是IANAL.Android在javax.security.sasl中没有所有内容,在javax.security.auth.callback中也没有一些类。所有这些类都没有其他依赖项,所以添加它们是安全的,它们甚至都是以和谐的方式实现的,所以我不明白为什么它们一开始就不包含它们。对于java mail,通常还有一些其他依赖项,但它们已经在java mail For android包中。我对许可证感到困惑,不是类路径异常,而是license.txt中的第3点,java限制,但可能我的解释是错误的。如果是这样的话,我下面的解决方案就可以了。javamail开发人员给出了有趣的答案。所以,没有办法让它与OAuth2.0一起工作,是吗?现在使用用户/密码也不是一个选项,因为gmail会用不安全警告让你烦死。感谢上面的回复和讨论-我最后只是在我的应用程序中要求用户名/密码,尽管我仍然更喜欢oauth 2和sasl(我没有使用SMTP)。您是否有指向您使用的jar或源代码的链接?这里有一个包含源代码和jar的zip。这只是javamail的邮件部分,您需要从javamail for android激活和添加jar。如果需要,您可以使用jardesc导出一个新的jar。@alex您附加的代码是java project。如果您为android创建了任何示例,请共享。感谢smtp发件人-SMTPTransport工作正常,检查邮件时使用IMAP无法使用OAuth2