首页 > 解决方案 > Windows 7 上的 PowerShell SMTPClient 失败(“需要身份验证”);适用于 Windows 10

问题描述

以下 PowerShell 脚本片段在最新 .NET (4.8) 的 Windows 10 (PSv5.1) 上运行良好。

它在 Windows 7 (PSV2.0) 上失败,服务器响应为:“需要授权”。但是,如果我将 $sendercreds.Password 替换为实际的明文密码,它就可以了!

$sendercreds = Get-Credential
$smtp = New-Object System.Net.Mail.SmtpClient
$to = New-Object System.Net.Mail.MailAddress("someone@somewhere.com")
$from = New-Object System.Net.Mail.MailAddress("sender@senderhost.com")
$msg = New-Object System.Net.Mail.MailMessage($from, $to)
$msg.subject = "Something I want to tell them"
$smtp.Host = "smtpserver.senderhost.com"
$smtp.EnableSsl = $True
$smtp.Port = 587
$smtp.Credentials = New-Object System.Net.NetworkCredential($sendercreds.UserName, $sendercreds.Password)
$smtp.Send($msg)

我将 Win7 机器 .NET 从 4.6.1 更新到 4.8:不高兴...

它似乎与 PS2.0 中的 SecureString 支持有关,但经过数小时的头撞后,我在网上找不到任何关于此的信息!

标签: powershellsmtpclientsecurestring

解决方案


经过一番搜索,我终于登陆了:https ://www.pdq.com/blog/powershell-running-net-4-with-powershell-v2/ 。事实证明 PSV2.0 不会使用您安装的最新 .NET 框架,除非用 .config 文件告诉它!

配置 (XML) 文件(powershell.exe.config 和 powershell_ise.exe.config)需要包含以下内容:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup>
      <supportedRuntime version="v4.0.30319" />
      <supportedRuntime version="v2.0.50727" />
    </startup>
</configuration>

推荐阅读