2016-09-27 1 views
1

이전에 Powerintalk 스크립트 용 이메일을 가져 오기 위해 Gmail Atom Feed를 사용하고 있었지만 이전 API가 더 이상 지원되지 않고 새로운 Gmail API가 출시 되었기 때문에 가능한지 궁금합니다. 새 Gmail API에 해당하는 스크립트를 작성하십시오.새 Gmail API : powershell에 대한 지원

내 이전 스크립트 나는 새 Gmail API를위한 새로운 스크립트를 작성할 수있는 방법

$webclient = new-object System.Net.WebClient 
$webclient.Credentials = new-object System.Net.NetworkCredential ("gmailemail", "pass") 
[xml]$xml= $webclient.DownloadString("https://mail.google.com/mail/feed/atom") 

, 나는 어떤 PowerShell을 예를 보지 않았다 그러나 나는 내가 이메일에 REST 호출을 할 수있을 수 있습니다 생각했다 get 메소드를 사용하여. 그러나 나는 어떻게 연결해야할지 모르겠다.

새로운 Gmail API를 사용하는 PowerShell에 대한 지원이 있습니까?

gmail API에 대한 클라이언트 ID를 설정했으며 Users.message에 get 메소드를 사용하여 특정 이메일 메시지를 가져오고 싶습니다.

https://developers.google.com/gmail/api/v1/reference/users/messages/get

Atempt # 1

$data = Invoke-RestMethod -Method Get -Uri "https://www.googleapis.com/gmail/v1/users/myemail%40gmail.com/profile?key=client-id" 

내가 노력하고 내가 오류

가 제공 브라우저에서
Invoke-RestMethod : The remote server returned an error: (401) Unauthorized. 

PowerShell에서 나에게 오류를 제공

{ 
"error": { 
    "errors": [ 
    { 
    "domain": "global", 
    "reason": "required", 
    "message": "Login Required", 
    "locationType": "header", 
    "location": "Authorization" 
    } 
    ], 

    "code": 401, 
    "message": "Login Required" 
} 
} 

이 시도 2 ​​

$headers = @{} 
$headers.Add("Authorization", "Basic [email protected] pass") 
$data = Invoke-RestMethod -Method Get -Headers $headers -Uri "https://www.googleapis.com/gmail/v1/users/myemail%40gmail.com/profile?key=client_id" 
echo $data 

오류

Invoke-RestMethod : The remote server returned an error: (403) Forbidden. 
+0

오류 ([https://groups.google.com/forum/#!topic/google-analytics-data-export-api/jIQaR8ItqGQ)는 '권한 부여 : Oauth {access 토큰} "을 추가하십시오. 요청에 대한 자격 증명이 올바르지 않습니다 (또는 누락되었습니다). 이 [관련 게시물에서] (http://stackoverflow.com/questions/35986647/how-do-i-get-the-body-of-a-web-request-that-returned-400-bad-request- from-invoke),'$ resp'가 다른 타입 (문자열, psobject, 그리고이 경우 null 일 가능성이 높다)이면, 에러 메시지를 반환합니다. – abielita

+0

PowerShell *을 사용하여 Gmail API에서 메일 보내기 * [튜토리얼] (http://thinkami.hatenablog.com/entry/2016/07/14/063045#OAuth20 で の 인증 부분의 작성)을 확인할 수 있습니다. – abielita

답변

0
Function Get-SubjectLine 
{ 
#Acquires access token. 
$accessToken = {accessToken}; 

     #Acquires most recent message ID using access token. 
     $messageIDjson = Invoke-WebRequest -Uri "https://www.googleapis.com/gmail/v1/users/me/messages?access_token=$accessToken" -Method Get | ConvertFrom-Json; 
     #Converts JSON message and thread ids into string. 
     $messageID = ($messageIDjson | Out-String); 
     #Seperates string on first message ID, places messageID into $result. 
     $start = $messageID.indexOf("=") + 1; 
     $end = $messageID.indexOf(";", $start); 
     $length = $end - $start; 
     $result = $messageID.substring($start, $length); 
     #Acquires most recent message, using ID stored in result and access token. 
     $messages = Invoke-WebRequest -Uri ("https://www.googleapis.com/gmail/v1/users/me/messages/$result" + "?access_token=$accessToken") -Method Get | ConvertFrom-Json; 

return $messages.snippet; 
} 

이 기능은 사용자의받은 편지함에서 가장 최근의 메시지 헤더를 반환합니다. 일반적인 XML/JSON 구조를 사용하고 스 니펫을 원하는대로 변경할 수 있습니다. 원자 피드 헤더를 얻는 것과 동일한 기능을합니다. 지난 1 시간 내에 획득 한 액세스 토큰이없고 액세스 토큰을 정기적으로 새로 고쳐야 만 Google API 기능에 액세스 할 수 없으므로 새로 고침 토큰과 액세스 토큰을 반드시 획득해야합니다.

새로 고침 토큰 및 토큰에 대해 더 자세히 알고 싶다면 Dalmto가 GitHub에 대한 답변에 특히 좋고 자세한 설명을 추가 했으므로이 earlier answer을 참조하는 것이 좋습니다.