【发布时间】:2015-08-27 15:37:13
【问题描述】:
好吧,正如标题所说,我在尝试通过 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 变量,我确实可以正常工作。
我有什么遗漏吗?
谢谢, 丹
【问题讨论】:
-
如果您需要通过 SMTP 服务器进行身份验证,是否需要发送 SMTP 用户凭据?
-
@EvanFrisch 他正在这样做 (
-Credential $cred)。 -
@AnsgarWiechers 我肯定会失明,我的错。
-
如果通过
Get-Credential提供密码时身份验证有效,但从文件中读取密码时无效,则问题很可能出在密码文件上。仔细检查文件的内容(尾随空格、编码等)。 -
感谢 Ansgar,您让我看到了正确的区域。我想到了。密码文件包含已加密的密码。我用未加密的明文密码替换了它,因此在设置我的 $pass 变量时它会被加密。
标签: email powershell smtp