新的Gmail API:支持PowerShell

时间:2016-09-27 15:34:04

标签: powershell gmail-api

我以前使用Gmail Atom Feed为我的PowerShell脚本提取电子邮件,但由于不再支持以前的API并且发布了新的Gmail API,我想知道是否可以为此编写等效的脚本新的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")

如何为新的gmail api编写新脚本,我没有看到任何powershell示例,但我想我可以使用get方法对电子邮件进行REST调用。但我不知道如何连接。

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

我已经为gmail api设置了我的客户端ID,我想使用Users.message的get方法来获取特定的电子邮件。

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

尝试#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 myemail@gmail.com 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.

1 个答案:

答案 0 :(得分: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上的答案进行了特别精确和详细的扩展。