email - Send-MailMessage : The SMTP server requires a secure connection. .. 服务器响应为 : 5. 5.1 需要身份验证。

标签 email powershell smtp

好吧,正如标题所说,我在尝试通过 PowerShell 发送电子邮件时收到此错误:

Send-MailMessage:SMTP 服务器需要安全连接或客户端未通过身份验证。服务器响应为:5.5.1 需要身份验证。

我已经查看了许多与同一问题相关的问题。但我似乎无法让我的脚本工作:

    #Email alerts when a user gets locked out
##############################################################################
$pass = Get-Content .\securepass.txt | ConvertTo-SecureString -AsPlainText -Force
$name = "sender@gmail.com"
$cred = New-Object System.Management.Automation.PSCredential($name,$pass)
##############################################################################
$From = "sender@gmail.com"
$To = "recipient@domain.org"
$Subject = "User Locked Out"
$Body = "A user has been locked out of his/her account."
$SMTPServer = "smtp.gmail.com"
$SMTPPort = "587"

Send-MailMessage -From $From -to $To -Subject $Subject `
-Body $Body -SmtpServer $SMTPServer -port $SMTPPort `
-Credential $cred -UseSsl
##############################################################################

我已经从将运行脚本的机器登录到 Gmail 帐户。我还从 Google 客户经理处启用了访问安全性较低的应用程序。如果我使用 -Credential (Get-Credential) 提示输入凭据而不是调用 $cred 变量,我确实可以正常工作。

有什么我想念的吗?

谢谢, 丹

最佳答案

如果文件包含加密密码,最好像这样读取它(不带参数 -AsPlainText-Force):

$pass = Get-Content .\securepass.txt | ConvertTo-SecureString

演示:

PS C:\> $sec = 'foobar' | ConvertTo-SecureString -AsPlainText -Force
PS C:\> $sec
System.Security.SecureString
PS C:\> $txt = $sec | ConvertFrom-SecureString
PS C:\> $txt
01000000d08c9ddf0115d1118c7a00c04fc297eb01000000615ce070639b9647a5e05d42b41d373
0000000000200000000001066000000010000200000001614c19281e7c0b076cceb38e284b0f18b
c0d813ea40ed055dde96fd9ccb6977000000000e8000000002000020000000a10c7019eb224c3c6
387ba03bcd94993a50e0c468248284bbce4d235b11f1b94100000002421a5d7102de13c46ccc1db
c4921287400000000412332ecb500828f4403f3e225089c629369744bad62609b528ed0a7318abf
512c9b6a8884c43b3adc8a13d5d21a9ed27e56702bcc7db094da9d9d4c02dfa74
PS C:\> $sec2 = $txt | ConvertTo-SecureString
PS C:\> $sec2
System.Security.SecureString
PS C:\> $cred = New-Object Management.Automation.PSCredential 'foo', $sec2
PS C:\> $cred.GetNetworkCredential().Password
foobar

请注意,安全字符串的加密与用户和主机加密有关,这意味着您无法在另一台主机上或作为另一用户解密安全字符串。

关于email - Send-MailMessage : The SMTP server requires a secure connection. .. 服务器响应为 : 5. 5.1 需要身份验证。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30789299/

相关文章:

android - 如何从 Android 中的电子邮件 URL 打开已安装的应用程序?

c# - SmtpClient "Request failed; Mailbox unavailable"

variables - 带变量的 Powershell 复制文件

smtp - 调试 SMTP 连接

python smtp gmail认证错误(通过gmail smtp服务器发送邮件)

php - PHP 邮件中我们真的需要 -f 标志吗?为什么?

email - Laravel 5.4 重置密码时删除邮件字段

powershell - 如何确保输入密码?

powershell - 如何将 PowerShell 脚本指定为 Docker 容器入口点?

c# - 在 asp.net 中获取电子邮件附件大小