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

Yahoo メールは、OAuth(2) 認証を使用して IMAP でアクセスできます。

アプリを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 日更新: Yahoo は残念ながら以下で参照されている cck-form.html ページを削除し、新しいアプリがメール関連の API アクセスを要求することを許可していないようであるため、この回避策は機能しなくなります。うまくいけば、これは変わります。

メールにフルアクセスできるYahooアプリを作成する方法は次のとおりです。(最近、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 に答える