Email 发送邮件消息:SMTP服务器需要安全连接。。。服务器响应为:需要5.5.1身份验证。
好的,正如标题所说,我在尝试通过PowerShell发送电子邮件时出现以下错误: 发送邮件:SMTP服务器需要安全连接,或者客户端未通过身份验证。服务器响应为:需要5.5.1身份验证 我研究了许多与同一问题有关的问题。但我似乎无法让我的脚本工作:Email 发送邮件消息:SMTP服务器需要安全连接。。。服务器响应为:需要5.5.1身份验证。,email,powershell,smtp,Email,Powershell,Smtp,好的,正如标题所说,我在尝试通过PowerShell发送电子邮件时出现以下错误: 发送邮件:SMTP服务器需要安全连接,或者客户端未通过身份验证。服务器响应为:需要5.5.1身份验证 我研究了许多与同一问题有关的问题。但我似乎无法让我的脚本工作: #Email alerts when a user gets locked out ############################################################################## $
#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
变量来提示输入凭据,我确实可以很好地实现这一点
我有什么遗漏吗
谢谢,
Dan多亏了Angsgar,我在查看密码文件内容后找到了答案。securepass.txt中包含加密内容,而不是明文。我所做的是将其替换为实际密码,然后在设置$pass变量时对其进行加密。现在一切都好了 如果文件包含加密密码,最好这样读取(不带参数
-AsPlainText
和-Force
):
$pass=获取内容。\securepass.txt |转换为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
PS C:\>$sec='foobar'|转换为SecureString-AsPlainText-Force
PS C:\>$sec
System.Security.SecureString
PS C:\>$txt=$sec|从SecureString转换
PS C:\>$txt
01000000d08c9ddf0115d1118c7a00c04fc297eb01000000615ce070639b9647a5e05d42b41d373
0000000000 20000000000010660000000100002000001614C19281E7C0B076CCEB38E284B0F18B
C0D813EA40ED055DDE96FD9CCB697700000000E8000000020000200000A10C7019EB224C3C6
387BA03BCD94993A50E0C4682482884BBCE4D235B1F1B941000000002421A5D7102DE13C46CCC1DB
C4921287400000000412332ECB500828F4403E225089C629369744BAD62609B528ED0A7318ABF
512c9b6a8884c43b3adc8a13d5d21a9ed27e56702bcc7db094da9d9d4c02dfa74
PS C:\>$sec2=$txt|转换为SecureString
私人秘书长:\>$sec2
System.Security.SecureString
PS C:\>$cred=New Object Management.Automation.PSCredential'foo',$sec2
PS C:\>$cred.GetNetworkCredential().Password
福巴
请注意,安全字符串的加密与加密它们的用户和主机有关,这意味着您无法在另一台主机上或以另一个用户的身份解密安全字符串。Ansgar的答案是一个很好的通用答案,但对于Google来说,他们有多个SMTP服务器可供您使用
smtp.google.com
需要身份验证,但不是所有的都需要
从中,如果您的站点是G套件站点,并且您总是从特定的IP地址发送,则可以在G套件配置中指定地址,然后使用位于SMTP relay.gmail.com
的G套件SMTP中继。这仅对G套件用户可用,并且需要身份验证或静态IP。在我们的网站上,我们有一个内部SMTP服务器,用于转发到Google的G套件SMTP中继服务器的此类电子邮件
如果您只向Google或G套件地址发送电子邮件,则可以指定
aspmx.l.Google.com
作为SMTP地址。这就是所谓的受限Gmail SMTP服务器。如果你需要通过SMTP服务器的身份验证,你需要发送SMTP用户凭据吗?@EvanFrisch他正在这样做(-Credential$cred
)。@AnsgarWiechers我肯定会失明,我的错误。如果身份验证在通过Get Credential
提供密码时有效,但在从文件读取密码时无效,则密码文件最有可能出现问题。仔细检查文件的内容(尾随空格、编码等)。谢谢Ansgar,你让我看到了正确的区域。我想出来了。密码文件包含已加密的密码。我将其替换为明文未加密密码,以便在设置$pass变量时对其进行加密。