繁体   English   中英

使用powershell发送电子邮件,同时在加密文件中安全地保存密码

[英]Use powershell to send email while saving your password securely in encrypted file

我找到了类似的线程但没有解决我的问题。 我正在尝试使用SMTP服务器发送电子邮件,附件(通过gmail)。 这很容易做到。 我得到的主要错误响应是

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

我认为这与从密码文件中获取密码到Credentials有关

"Password123" | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString | Out-File "C:\Folder\Password.txt"
$EmailFrom = "emailaddress@gmail.com"
$EmailTo = "otheremailaddress@gmail.com" 
$Subject = "Log file from server" 
$Subject = "Subject" 
$Body = "Here is the log file from the server" 
$File = "C:\Folder\LogFile.txt"
$attachment = New-Object System.Net.Mail.Attachment($File,'text/plain')

$mailmessage = New-Object system.net.mail.mailmessage
$mailmessage.from = ($EmailFrom)
$mailmessage.To.add($emailto)
$mailmessage.Subject = $Subject
$mailmessage.Body = $Body
$mailmessage.Attachments.Add($attachment)

$SMTPServer = "smtp.gmail.com" 
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
$SMTPClient.EnableSsl = $true 

$username = "emailaddress@gmail.com"
$pass = Get-Content "C:\Folder\Password.txt" | ConvertTo-SecureString -AsPlainText -Force

$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($username, $pass);

$SMTPClient.Send($mailmessage)

我想删除此代码的第一行,因为在脚本中输入密码永远不是一个好主意。

如果我将密码变量更改为以下内容我没有问题

$pass = "Password123"

我找到的所有其他论坛帖都暗示事情没有解决我的问题。

同时更改gmails设置以允许从安全性较低的应用程序访问并不能解决我的问题。

任何帮助将不胜感激

提前致谢。

编辑:

  1. 我有gmail可访问不太安全的应用程序
  2. 我为gmail做了两步验证
  3. 我认为问题在于读取密码文件。 这是一种在加密时无法接受文件密码的情况。 我尝试使用未加密的密码,但这对于脚本编写来说并不是更好

我过去遇到过这个问题 - 我认为Mathias已经提到了一个常见问题 - 注意在不同的凭据下运行(作为调度工作运行),因为解码依赖于使用用户的会话信息。 在你的例子中我不太确定的一件事是你为什么要进行后续转换为纯文本 - 否则,下面应该使用你的用户名和密码,将其导出到一个文件,然后将其导入为您可以在以后使用的凭证。

$user = "UsernameGoesHere"
$passwordtostore = 'PasswordGoesHere'
$secureStringPWD = $passwordtostore | ConvertTo-SecureString -AsPlainText -Force
$secureStringText = $secureStringPWD | ConvertFrom-SecureString
Set-Content "C:\temp\authenticationfile.cfg" $secureStringText
# Retrieve password
$pwdin = Get-Content "C:\temp\authenticationfile.cfg"
$password = $pwdin | ConvertTo-SecureString
$creds = New-Object System.Management.Automation.PSCredential -ArgumentList $user,$password

希望有帮助吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM