使用安全密码

时间:2017-04-04 17:04:56

标签: powershell smtp credentials

我试图测试发送电子邮件,但我不想在我的脚本中输入明文密码。

这是我拥有的,这有效:

$SmtpServer = 'smtp.office365.com'
$SmtpUser = 'fubsygamr@office365.com'
$smtpPassword = 'Hunter2'
$MailtTo = 'fubsygamr@office365.com'
$MailFrom = 'fubsygamr@office365.com'
$MailSubject = "Test using $SmtpServer"
$Credentials = New-Object System.Management.Automation.PSCredential -ArgumentList $SmtpUser, $($smtpPassword | ConvertTo-SecureString -AsPlainText -Force) 
Send-MailMessage -To "$MailtTo" -from "$MailFrom" -Subject $MailSubject -SmtpServer $SmtpServer -UseSsl -Credential $Credentials 

这很有效。

我遵循了this stackoverflow thread的建议,因为我希望这个脚本能够在不提示输入凭据(或输入明文)的情况下运行,因此我可以将其作为计划任务运行。

我有一个安全的密码,我已经通过运行:

创建了
read-host -assecurestring | convertfrom-securestring | out-file C:\Users\FubsyGamr\Documents\mysecurestring_fubsygamr.txt

但是如果我用建议的条目替换我的$ smtpPassword条目:

$SmtpServer = 'smtp.office365.com'
$SmtpUser = 'fubsygamr@office365.com'
$smtpPassword = cat C:\Users\FubsyGamr\Documents\mysecurestring_fubsygamr.txt | convertto-securestring
$MailtTo = 'fubsygamr@office365.com'
$MailFrom = 'fubsygamr@office365.com'
$MailSubject = "Test using $SmtpServer"
$Credentials = New-Object System.Management.Automation.PSCredential -ArgumentList $SmtpUser, $($smtpPassword | ConvertTo-SecureString -AsPlainText -Force) 
Send-MailMessage -To "$MailtTo" -from "$MailFrom" -Subject $MailSubject -SmtpServer $SmtpServer -UseSsl -Credential $Credentials 

然后电子邮件不再发送了。我收到以下错误:

  

Send-MailMessage:SMTP服务器需要安全连接,或者客户端未经过身份验证。服务器响应是:5.7.57 SMTP;客户端未经过身份验证即可发送   MAIL FROM期间的匿名邮件

任何提示?我想将此电子邮件脚本作为计划任务运行,但我不希望我的密码以纯文本格式保存。

1 个答案:

答案 0 :(得分:1)

Coworker帮助我意识到$Credentials对象试图将我的密码转换回纯文本。我删除了ConvertTo-SecureSTring -AsPlainText -Force修饰符,并成功发送了电子邮件!

功能正常的脚本:

$SmtpServer = 'smtp.office365.com'
$SmtpUser = 'fubsygamr@office365.com'
$smtpPassword = cat C:\Users\FubsyGamr\Documents\mysecurestring_fubsygamr.txt | convertto-securestring
$MailtTo = 'fubsygamr@office365.com'
$MailFrom = 'fubsygamr@office365.com'
$MailSubject = "Test using $SmtpServer"
$Credentials = New-Object System.Management.Automation.PSCredential -ArgumentList $SmtpUser, $smtpPassword
Send-MailMessage -To "$MailtTo" -from "$MailFrom" -Subject $MailSubject -SmtpServer $SmtpServer -UseSsl -Credential $Credentials 
相关问题