7

根据 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

雅虎邮箱可以通过 IMAP 使用 OAuth(2) 身份验证访问。

我在https://developer.yahoo.com/apps/上注册了我的应用程序,所以我得到了客户端 ID 和客户端密码。我没有找到任何与邮件相关的范围(API 权限)。尽管如此,我还是选择了注册应用程序时显示的所有 API 权限。

我尝试同时实现 OAuth 和 OAuth2。

OAuth2:我无法获得范围“mail-r”的授权码。当我生成 URL(https://api.login.yahoo.com/oauth2/request_auth?client_id=CLIENT_ID&redirect_uri=oob&scope=mail-r&response_type=code)并在浏览器中打开它时,页面显示“开发人员:请从注册范围并再次提交。” 被展示。它适用于其他范围。例如,我可以获得“sdct-r”的授权码

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

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

4

6 回答 6

12

2017 年 2 月 27 日更新:此解决方法将不再有效,因为雅虎不幸删除了下面引用的 cck-form.html 页面,并且似乎不允许新应用程序请求与邮件相关的 API 访问。希望这会改变。

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

  1. 访问https://developer.yahoo.com/oauth/guide/cck-form.html并查找“这是一个示例表单以及您可以在表单中使用的示例值”并将示例 html 复制到本地文件中,然后保存。下面提供了 html 的副本。

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

  3. 在弹出窗口中单击允许。如果您尚未在浏览器上登录 yahoo,则需要登录。

转到https://developer.yahoo.com/apps/,您应该会看到您的应用具有适当的权限。

<html>  
<head>  
    <title>CCK Example</title>  
</head>  
<body>  
  
<form target="yCredWindow" action="http://developer.apps.yahoo.com/projects/createconsumerkey" method="post" id="extAuthForm" name="extAuthForm">  
  
<h2>Inputs</h2>  
<p>* = Required</p>    
<table>  
    <tr><th>Field</th>  
        <th>Input</th></tr>  
  
    <tr><td>* Application Name: </td>  
        <td><input name="name" id="name" value="Janrain Engage"></td></tr>  
  
    <tr><td>Description: </td>  
        <td><input name="description" id="desc"></td></tr>  
  
    <tr><td>appid: </td>  
        <td><input name="appid" id="appid"></td></tr>  
  
    <tr><td>Return to: </td>  
        <td><input name="return_to" id="return_to"></td></tr>  
  
    <tr><td>* Third Party Name: </td>  
        <td><input name="third_party" id="third_party" value="Janrain"></td></tr>  
  
    <tr><td>* Scopes: </td>  
        <td><input name="scopes" id="scope" value="ysrw"></td></tr>  
  
    <tr><td>Favicon URL: </td>  
        <td><input name="favicon" id="favicon"></td></tr>  
  
    <tr><td>Application URL: </td>  
        <td><input name="application_url" id="application_url"></td></tr>  
  
    <tr><td>* Domain: </td>  
        <td><input name="domain" id="domain" value="www.janrain.com"></td></tr></table>  
  
<input type="hidden" name="debug" id="debug" value="true">  
  
<button type="reset">clear all fields</button>  
<button type="button" id="submitWithDebug">pop window with debug</button>  
</form>  
  
<h6>Note: A URL that starts with http:// is required for: Return to, Favicon URL and Application URL.  However, you will get an error if you include http:// for the Domain.</h6>  
  
<h2>Returns</h2>  
<table>  
    <tr><td>Key returned:</td>  
        <td><input type="text" id="cKeyInputField"></td></tr>  
  
    <tr><td>Secret returned:</td>  
        <td><input type="text" id="cSecretInputField"></td></tr>  
  
    <tr><td>Appid returned:</td>  
        <td><input type="text" id="returnAppid"></td></tr></table>  
  
<script src="http://yui.yahooapis.com/3.0.0/build/yui/yui-min.js"></script>  
<script>  
  
var formTarget = null;  
  
// used by return_to.html to set the fields with the data that comes back  
var setFields = function(id, val)  { document.getElementById(id).value = val; };  
  
// pops the window, then submits to it  
var popWindowOnSubmit = function(e)  {  
    window.open('', formTarget, 'status=0,toolbar=0,location=0,menubar=0,width=545,height=650');  
    document.extAuthForm.submit();  
};  
  
// handle submit when the button is clicked  
YUI().use('node', function(Y) {  
    formObject = Y.one('#extAuthForm');  
    formTarget = formObject.getAttribute('target');  
    Y.on('click', popWindowOnSubmit, '#submitWithDebug');  
});  
  
</script>  
  
</body>  
</html> 

于 2016-06-21T11:46:44.907 回答
3

截至 2017 年 8 月,获取电子邮件地址的唯一方法是使用名为Profiles - Read/Write Public and Private的范围。雅虎对误导性选项的一个非常愚蠢的选择,因为我们根本不想“写”任何东西。

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

于 2017-08-16T22:59:23.617 回答
0

您必须在访问授权端点时添加 scope=openid,然后在 hittng 令牌端点之后获取令牌后,使用获得的访问令牌命中配置文件端点,然后我们会在配置文件 json 对象下收到电子邮件

于 2016-09-09T09:25:20.530 回答
0

在https://developer.yahoo.com/apps/上创建/配置应用程序时,您必须添加“Mail Read-Only”范围。

不幸的是,当我尝试在新创建的应用程序上执行此操作时,该选项不可用。

您可能必须与 Yahoo 取得联系才能让他们允许您请求这些范围。

于 2016-06-07T20:42:28.687 回答
0

为了让您在潜在范围列表中看到邮件复选框,雅虎必须将您的开发者帐户列入白名单。我找不到任何关于此的文档,或有关如何索取它的说明,因此我无法使用任何文档来支持它。

于 2017-05-22T06:44:36.260 回答
-1

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

https://developer.yahoo.com/apps/create/?api=mail
于 2017-03-22T20:57:46.947 回答