【发布时间】:2017-06-14 11:59:32
【问题描述】:
$firstEmail = "joe@gmail.com";
$secondEmail = "notjoe@gmail.com";
Function Set-MIMEBase64Encoded
{
Param(
[string]$subject
)
#Creates a MIME formatted email.
$text = "From: $firstEmail\r\n" + "To: $secondEmail\r\n" + "Subject: $subject\r\n\r\n" + "$subject";
$bytes = [System.Text.Encoding]::Unicode.GetBytes($text);
#Converts to Base 64.
$encodedText =[Convert]::ToBase64String($bytes);
#Makes encoding URL safe.
$urlSafe1 = $encodedText.replace('+', '-');
$urlSafe2 = $urlSafe1.replace('/', '_');
$urlSafe3 = $urlSafe2.replace('=', '*');
return $urlSafe3;
}
Function Mail-Output
{
Param(
[String]$subject
)
#Acquires access token.
$accessToken = Refresh-AccessToken;
#Sends subject for MIMEB64 encoding
$text = Set-MIMEBase64Encoded -subject $subject;
#Requests sends email according to parameters.
$messages = Invoke-WebRequest -Uri ("https://www.googleapis.com/gmail/v1/users/me/messages/send?access_token=$accessToken&raw=$text") -Method Post;
Write-Output $messages
}
Mail-Output -subject "Hope this works!"
所以,我在这里要做的是通过 Powershell 中的 Invoke-WebRequest 发送以 URL 安全 base64 编码的格式正确的 MIME(符合 RFC 2822)电子邮件。此示例应该可以工作,但问题似乎是 Gmail 实际上不接受以这种格式发送的电子邮件。
【问题讨论】:
-
您是否尝试过在此处使用 pscmdlet:github.com/squid808/gShell
-
我做了,但它不容易集成到我的项目中,我也不需要那里提供的其他 google API 功能。
-
不幸的是,实际上没有人回答完这个问题。
-
启用不太安全的应用程序来使用它不是问题。显然,我可以使用 SMTP 并将登录凭据明文放入脚本中。但如果我可以使用 gmail API 提供的方法发送消息,它会更安全(通过使用 google-OAuth),并且不需要更改防火墙以允许 SMTP。
标签: powershell google-api gmail gmail-api mime