powershell - 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 支持有关,但经过数小时的头撞后,我在网上找不到任何关于此的信息!
解决方案
经过一番搜索,我终于登陆了: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>
推荐阅读
- selenium-webdriver - 树莓派 4:selenium.common.exceptions.SessionNotCreatedException:消息:无法找到匹配的功能集
- c - VSCode Coderunner 问题
- laravel - nuxt.js 如何使用 laravel 后端 API 上传图片
- react-native - 已调度操作并更新状态,但未渲染 UI 组件
- python-3.x - python-3 并行化我的函数问题
- php - 如何使用 laravel eloquent 和 Carbon 获得将在下个月开始而不是在本月开始的课程?
- python - 如何在我的脚本中使用 random.choice 以便在每次按下按钮后得到不同的结果而不关闭 Tkinter 窗口?
- c# - 同时更改列表中游戏对象的颜色
- java - 如何制作随机整数?
- ruby - 需要帮助在 Mac 上安装 Ruby 2.7.2