2017-09-27 8 views
1

오랫동안 수색했지만 관련 솔루션을 찾지 못했습니다.javascript SDK로 Outlook 메시지를 보내는 방법은 무엇입니까?

makeSilentTokenRequest

//The static key authentication request 
function makeSilentTokenRequest(callback) { 

    // Build up a hidden iframe 
    var iframe = $('<iframe/>'); 
    iframe.attr('id', 'auth-iframe'); 
    iframe.attr('name', 'auth-iframe'); 
    iframe.appendTo('body'); 
    iframe.hide(); 

    iframe.load(function() { 
     callback(localStorage.accessToken); 
    }); 

    iframe.attr('src', buildAuthUrl() + '&prompt=none&domain_hint=' + 
     localStorage.userDomainType + '&login_hint=' + 
     localStorage.userSigninName); 

} 

getAccessToken

//Verify refresh token function 
function getAccessToken(callback) { 
    var now = new Date().getTime(); 
    var isExpired = now > parseInt(localStorage.tokenExpires); 

    // Do we have a token already? 
    if (localStorage.accessToken && !isExpired) { 
     // Just return what we have 
     if (callback) { 
      callback(localStorage.accessToken); 
     } 
    } else { 
     // Attempt to do a hidden iframe request 
     makeSilentTokenRequest(callback); 
    } 
} 
: 나는 403을 얻기 위해 마이크로 소프트 그래프 API를 통해 메일을 보낼 때 문제가

{ 
    statusCode: 403, 
    code: "ErrorAccessDenied", 
    message: "Access is denied. Check credentials and try again." 
} 

코드입니다

는 나도 몰라

getUserEmailAddress

function getUserEmailAddress(callback) { 
    //I saved it in localStorage 
    if (localStorage.userEmail) { 
     return localStorage.userEmail; 
    } else { 
     //getAccessToken 
     getAccessToken(function (accessToken) { 
      if (accessToken) { 
       // Create a Graph client 
       var client = MicrosoftGraph.Client.init({ 
        authProvider: (done) => { 
         // Just return the token 
         done(null, accessToken); 
        } 
       }); 
       // Get the Graph /Me endpoint to get user email address 
       client 
        .api('/me') 
        .get((err, res) => { 
         if (err) { 
          callback(null, err); 
         } else { 
          callback(res.mail); 
         } 
        }); 
      } else { 
       var error = { 
        responseText: 'Could not retrieve access token' 
       }; 
       callback(null, error); 
      } 
     }); 
    } 
} 

센드 메일

//sendMail 
function sendMail(message) { 
    getUserEmailAddress(function (userEmail, error) { 
     if (error) { 
      renderError('getUserEmailAddress failed', error.responseText); 
     } else { 
      getAccessToken(function (accessToken) { 
       if (accessToken) { 
        // Create a Graph client 
        var client = MicrosoftGraph.Client.init({ 
         authProvider: (done) => { 
          // Just return the token 
          done(null, accessToken); 
         } 
        }); 
        client 
         .api('/me/sendMail') 
         .header('Authorization', 'Bearer ' + accessToken) 
         .header('Content-Type', "application/json") 
         .post(message, (err, res) => { 
          if (err) { 
           console.log(err); 
           //callback(null, err); 
          } else { 
           console.log(res); 
           //callback(res.value); 
          } 
         }); 
       } else { 
        var error = { 
         responseText: 'Could not retrieve access token' 
        }; 
        //callback(null, error); 
       } 
      }); 
     } 
    }) 
}  

createMail는

function createMail(message,callback){ 
     getUserEmailAddress(function(userEmail, error) { 
      if (error) { 
       renderError('getUserEmailAddress failed', error.responseText); 
      } else { 
       getAccessToken(function(accessToken) { 
        if (accessToken) { 
         // Create a Graph client 
         var client = MicrosoftGraph.Client.init({ 
          authProvider: (done) => { 
           // Just return the token 
           done(null, accessToken); 
          } 
         }); 
         client 
          .api('/me/messages') 
          .header('Authorization', 'Bearer ' +accessToken) 
          .header('Content-Type', "application/json") 
          .post(message,(err, res) => { 
           if (err) { 
            callback(res); 
            console.log("创建失败!"); 
           } else { 
            callback(res); 
            console.log("创建成功!"); 
           } 
          }); 
        } else { 
         var error = { responseText: 'Could not retrieve access token' }; 
         //callback(null, error); 
        } 
       }); 
      } 
    }) 
    }  

답변

0

여기에 갈 정도가 아니라 오류 메시지가 accessToken이 유효하지 않음을 말하고있다.

요청한 범위 또는 실행중인 인증 워크 플로를 볼 수 없으므로 내가 잘못 지정된 이유를 정확히 찾아 낼 수 없습니다.

+0

미리 감사드립니다. 사용 방법을 문제에 넣었습니다. 저는 Microsoft의 방법으로 'accessToken'을 사용하고 있으며 정상적으로 메일 링리스트를 얻을 수 있지만 메일을 보낼 때 문제가 있습니다. 내가주의해야 할 특별한 점은 무엇입니까? – ronger

+0

그래서 우리는'accessToken'을 얻기위한 "FW"Microsoft Ways "를 가지고 있습니다. 자체 스코프 세트 (Microsoft Graph API, Azure Graph API, Microsoft Graph API)가있는 여러 API는 말할 것도없고 여러 끝점 (v1.0 v2.0)과 여러 OAUTH 흐름 ('authorization_code','implicit','client_credentials') Exchange 웹 서비스, Yammer API 등). 정확하게 토큰을 얻는 방법을 이해하면이 경우 토큰이 거부되는 이유를 알 수 있습니다. –

+0

감사합니다. 분명하지는 않습니다. [Microsoft Graph API] (https://developer.microsoft.com/ko-kr/graph/docs/api-reference/v1.0/api)를 사용하고 있습니다./user_sendmail) – ronger