我找到了类似的线程但没有解决我的问题。我正在尝试使用SMTP服务器发送电子邮件,附件(通过gmail)。这很容易做到。我得到的主要错误响应是
SMTP服务器需要安全连接,或者客户端未经过身份验证。服务器响应为:5.5.1需要身份验证。"
我认为这与将密码文件中的密码输入凭证
有关"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设置以允许来自不太安全的应用程序的访问并不能解决我的问题。
非常感谢任何帮助
提前致谢。
编辑:
答案 0 :(得分:0)
我在过去遇到过这个问题 - 我认为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
希望有帮助吗?