2016-09-27 95 views
1

我之前使用Gmail Atom Feed爲我的PowerShell腳本獲取電子郵件,但由於之前的API不再受支持,並且發佈了新的Gmail API,所以我想知道我是否可以可能會爲新的Gmail API編寫相應的腳本。新的Gmail API:支持powershell

我以前的腳本

$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") 

我怎麼能寫新的Gmail API一個新的腳本,我沒有看到任何PowerShell的例子,但我想可能是我可以做一個REST調用電子郵件使用get方法。但我不確定如何連接。

PowerShell是否支持使用新的Gmail API。

我已經爲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" 

我想,它給我的錯誤在PowerShell中

Invoke-RestMethod : The remote server returned an error: (401) Unauthorized. 

在瀏覽器,它給了我錯誤

{ 
"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

錯誤[401](https://groups.google.com/forum/#!topic/google-analytics-data-export-api/jIQaR8ItqGQ)意味着您仍需要通過授權:Oauth {access標記}「'在你的頭文件中。請求中的憑據不正確(或缺失)。從這[相關SO帖子](http://stackoverflow.com/questions/35986647/how-do-i-get-the-body-of-a-web-request-that-returned-400-bad-request-如果'$ resp'是某種其他類型(string,psobject,在這種情況下可能爲null),它將返回一條錯誤消息。 – abielita

+0

您可以查看此[教程](http://thinkami.hatenablog.com/entry/2016/07/14/063045#OAuth20での認證部分的作成)*使用PowerShell *從Gmail API發送郵件。 – 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結構並將代碼段更改爲任何您想要的內容。它具有相同的功能,以獲得原子飼料頭。請務必在使用前獲取刷新令牌和訪問令牌,因爲它無法訪問Google API函數,除非它具有在最近一小時左右獲取的訪問令牌,並且必須定期刷新訪問令牌。

如果您想了解更多關於刷新令牌和訪問令牌,我建議參照本earlier answer,作爲Dalmto給了一個特別漂亮的,詳細的擴展她的回答上GitHub