如何在smtp凭据中使用加密的安全密码

时间:2017-05-26 06:17:05

标签: powershell powershell-v3.0

在我的.ps1文件中,我想执行一个作业并通过电子邮件发送结果。我希望密码不可读,所以我事先通过这样做加密它。

$password = read-host -prompt "Enter your Password"
write-host "$password is password"
$secure = ConvertTo-SecureString $password -force -asPlainText
$bytes = ConvertFrom-SecureString $secure
$bytes | out-file .\securepassword.txt

到目前为止工作正常。

然后我想在.ps1中使用安全密码,这是我遇到困难的地方。我尝试了很多变化,但我认为这是迄今为止我最坚定的尝试:

 $usercred = "myemail@gmail.com"
 $encryptedpw = Get-Content .\securepassword.txt
 $pwcred = $ecryptedpw | ConvertTo-SecureString

当我尝试在我的$smtp.credentials中使用此功能时:

$smtp.Credentials = New-Object System.Net.NetworkCredential($usercred, $pwcred);

它在The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required.

输出以下错误$smtp.send($msg)

而且我知道密码是问题(至少我很确定),因为如果我手动输入密码 - 它可以正常工作。有什么想法吗?

_编辑1 _

以下是整个发送邮件部分,如果有人想知道:

# Send Notification if alert $i is greater then 0 
if ($i -gt 0) 
{ 
    foreach ($user in $users) 
{ 

  $smtpServer = "smtp.gmail.com" 
  $port = "587"
  $smtp.EnableSSL = $true
  $smtp = New-Object Net.Mail.SmtpClient($smtpServer, $port) 
  $smtp.EnableSsl = $true 
  $smtp.Credentials = New-Object System.Net.NetworkCredential($usercred, $pwcred);
  $msg = New-Object Net.Mail.MailMessage 
  $msg.To.Add($user) 
        $msg.From = "myemail@gmail.com" 
  $msg.Subject = "Environment DiskSpace Report for $titledate" 
        $msg.IsBodyHTML = $true 
        $msg.Body = get-content $blablabla
  $smtp.Send($msg) 
        $body = "" 
    } 
  } 

2 个答案:

答案 0 :(得分:1)

感谢这里的一些输入,我能够找到解决方案。我认为另一个因素也起到了作用。

1)我从另一台机器加密了密码,我显然不应该这样做。我注意到加密的结果根据加密的计算机而有所区别(有人可以随意解释这个)。

2)我最终得到的代码如下:

$usercred = "myemail@gmail.com" $encryptedpw = Get-Content .\securepassword.txt $password = ConvertTo-SecureString -String $encryptedpw

然后

$smtp.Credentials = New-Object System.Net.NetworkCredential($usercred, $password);

答案 1 :(得分:0)

根据此{{3}}的答案,您可以尝试以下操作:

{{1}}

希望有所帮助