使用Powershell发送Gmail

时间:2018-07-03 15:08:26

标签: powershell email smtp gmail

我也在为自己的房屋开发一个简单的监控器,我需要它给我发送电子邮件。但是,无论我如何尝试,都不会连接到我的Gmail帐户来发送通知-甚至是简单的测试消息。我有一个脚本,该脚本适用于为工作而编写的实用程序,但是使用的是公司SMTP中继。我不会混合工作和个人资源。

在过去的4-5周中,我一直在仔细研究并尝试其他几种开发语言。所有人都提出了类似的问题。

我尝试了以下操作:

  • 打开安全性较低的应用
  • 尝试了25、465、587等各种端口
  • 打开和关闭SSL
  • 尝试了多种形式的用户名(电子邮件地址)
  • 打开两要素身份验证并为此实用程序创建应用密码
  • 尝试打开TLS-出现一个错误,表明我需要一个starttls命令。

使用Powershell,我似乎会遇到两个常见错误。第一个取决于我要发送到Send参数的参数-无论如何,它都会失败。

[错误的屏幕截图-] [1]

我去过多个论坛和站点。所有建议的代码似乎都是相同结构的所有变体,就像我办公室的工作代码一样-仅使用我们自己的邮件系统。

1 个答案:

答案 0 :(得分:2)

您应该可以使用Send-MailMessage。这是一个使用Gmail的SMTP服务器安全发送电子邮件的示例(包括如何安全存储凭据以供以后或在自动化中进一步使用):

# Securely enter your Gmail credential
$cred = Get-Credential

# Store it off in a file if you want to reuse it later from the same box
# Password is encrypted and only your user on the same box can decrypt it
$cred | Export-CliXml \Path\To\GmailCredential.xml

# Import the credential from the file later
$cred = Import-CliXml \Path\To\GmailCredential.xml

# Send the mail message (use -BodyAsHtml instead of -Body if you have an HTML body)
$sendMailArguments = @{
  SmtpServer = "smtp.gmail.com"
  Credential = $cred
  UseSsl = $true
  Port = 587
  To = "mailbox@domain.tld"
  From = "youremail@domain.tld"
  Subject = "Subject of the email"
  Body = "Body of the email"
}
Send-MailMessage @sendMailArguments

请注意,如果您设置了多重身份验证(MFA),则将需要一个特定于应用程序的凭据来身份验证Gmail,这也是使用MFA为Gmail帐户设置电子邮件客户端所需的步骤

如果您 无法达到smtp.gmail.com,则可能是您的防火墙阻止了到该服务器和端口的流量。

如果您想更好地理解为什么我要使用参数的哈希图而不是分别指定每个参数来调用Send-MailMessage,请参阅此答案的注释讨论,并在此处阅读Splatting:{{3 }}