IMAP如何使用OAuth或OAuth2身份验证访问Yahoo Mail

IMAP如何使用OAuth或OAuth2身份验证访问Yahoo Mail,oauth,oauth-2.0,imap,yahoo-mail,yahoo-oauth,Oauth,Oauth 2.0,Imap,Yahoo Mail,Yahoo Oauth,根据developer.yahoo.com/mail/和IMAP回复: * OK [CAPABILITY IMAP4rev1 ID MOVE NAMESPACE X-ID-ACLID UIDPLUS LITERAL+ CHILDREN XAPPLEPUSHSERVICE XYMHIGHESTMODSEQ AUTH=PLAIN AUTH=LOGIN AUTH=XOAUTH2 AUTH=XYMCOOKIE AUTH=XYMECOOKIE AUTH=XYMCOOKIEB64 AUTH=XYMPKI]

根据developer.yahoo.com/mail/和IMAP回复:

* OK [CAPABILITY IMAP4rev1 ID MOVE NAMESPACE X-ID-ACLID UIDPLUS LITERAL+ CHILDREN XAPPLEPUSHSERVICE XYMHIGHESTMODSEQ AUTH=PLAIN AUTH=LOGIN AUTH=XOAUTH2 AUTH=XYMCOOKIE AUTH=XYMECOOKIE AUTH=XYMCOOKIEB64 AUTH=XYMPKI] IMAP4rev1 imapgate-1.8.1_01.20166 imap1009.mail.ne1.yahoo.com
使用OAuth(2)身份验证,IMAP可以访问雅虎邮件

我在上注册了我的应用程序,因此我获得了客户ID和客户机密。我没有找到任何与邮件相关的作用域(API权限)。尽管如此,我还是选择了注册应用程序时显示的所有API权限

我尝试实现OAuth和OAuth2

OAuth2: 我无法获取作用域“mail-r”的授权代码。当我生成URL()并在浏览器中打开它时,将显示文本为“开发者:请从已注册的作用域请求作用域并再次提交”的页面。它适用于其他范围。例如,我可以获得“sdct-r”的授权码

OAuth: 我可以得到一个访问令牌。但是当我使用AUTHENTICATE XOAUTH2命令发送它时,我得到了“NO[AUTHENTICATIONFAILED](#AUTH007)Bad scope”响应

因此,问题是应该设置什么范围来使用IMAP和OAuth(2)访问Yahoo Mail?

在上创建/配置应用程序时,必须添加“邮件只读”范围

不幸的是,当我在新创建的应用程序上尝试这样做时,该选项不可用


您可能需要与Yahoo联系,让他们允许您请求这些范围。

2017年2月27日更新:由于Yahoo不幸删除了下面引用的cck-form.html页面,并且似乎不允许新应用请求与邮件相关的API访问,因此此解决方案将不再有效。希望这种情况有所改变

下面是你如何在雅虎上创建一个可以完全访问电子邮件的应用程序。(最近yahoo从他们的UI中删除了这个选项)一旦有了适当的权限,获取oauth令牌和访问邮箱应该是直截了当的,我在这里不做介绍

  • 访问并查找“这是一个示例表单以及可以在表单中使用的示例值”,然后将示例html复制到本地文件并保存。下面提供了html的副本

  • 在浏览器上打开文件。填写适当的信息(设置scope=ymrf以获得完整的邮件访问权限)并单击“带调试的弹出窗口”

  • 单击弹出窗口上的“允许”。如果您尚未在浏览器上登录yahoo,则需要登录

  • 转到,您应该可以看到具有相应权限的应用程序

    
    CCK示例
    投入
    *=必需的

    领域 输入 *应用程序名称: 说明: appid: 返回: *第三方名称: *范围: Favicon网址: 应用程序URL: *域: 清除所有字段 带调试的弹出窗口 注意:返回到、Favicon URL和应用程序URL需要以http://开头的URL。但是,如果在域中包含http://则会出现错误。 退换商品 返回的密钥: 返回的秘密: 返回的Appid: var formTarget=null; //return_to.html用于设置包含返回数据的字段 var setFields=function(id,val){document.getElementById(id).value=val;}; //弹出窗口,然后提交给它 var popWindowOnSubmit=函数(e){ 打开(“”,formTarget,'状态=0,工具栏=0,位置=0,菜单栏=0,宽度=545,高度=650'); document.extAuthForm.submit(); }; //单击按钮时处理提交 YUI()。使用('node',函数(Y){ formObject=Y.one(“#extAuthForm”); formTarget=formObject.getAttribute('target'); Y.on('click',popWindowOnSubmit',#submitWithDebug'); });
    在点击授权端点时,必须添加scope=openid, 然后在hittng令牌端点之后获取令牌, 使用获得的访问令牌命中配置文件终结点,
    然后我们在profile json object下收到电子邮件

    我找到了另一种方法来创建启用邮件API权限的应用程序。我注意到,如果在URL中包含“api”参数,则可以指定要包含的作用域,而不管它们是否在底部被选中。我注意到,如果您在URL中提供了'api=mail',它默认包含邮件权限。因此,要创建具有邮件权限的新应用,请使用以下URL:

    https://developer.yahoo.com/apps/create/?api=mail
    

    为了让你看到潜在作用域列表中的邮件复选框,雅虎必须将你的开发者帐户列为白名单。我找不到关于此的任何文档,也找不到关于如何申请的说明,因此我无法用任何文档对此进行备份。

    截至2017年8月,获取电子邮件地址的唯一方法是使用名为配置文件-读/写公共和私人的范围。雅虎做出了一个非常愚蠢的误导性选择,因为我们根本不想“写”任何东西


    作为额外的麻烦,这还将返回与帐户相关的所有电子邮件的列表,而不仅仅是主邮件。而且无法准确识别哪个是真实的-列表中返回的primary=true字段不可信。

    似乎高级邮件帐户可以使用邮件api。。。查看packagetracker网站,在与yahoo注册时,它显示了oauth2过程中的邮件范围。。。我也找不到包含该范围的方法。。。如果你找到了一个包含它的方法,请在这里发布答案,这将是一个很大的帮助…@Aleksey你找到了什么吗?@Aleksey,请将user3377687答案标记为已接受。。。我已经检查过了,它可以工作了。。。如果将作用域设置为ymrf=>FullAccessDone,它肯定会添加邮件完全权限,谢谢。当然,非常感谢,@user3377687。这家伙应该得到一个Cookiet解决方案是可行的,但也是可行的