You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell发送邮件?执行代码遇连接关闭错误求助

使用PowerShell通过Yahoo SMTP发送邮件时出现net_io_connectionclosed错误的解决方法

问题重现

尝试使用PowerShell发送邮件,代码如下:

$Username = "test@yahoo.com"
$Password = "testpassword"
 
$SecurePassword = $Password | ConvertTo-SecureString -AsPlainText -Force
$Credentials = New-Object System.Management.Automation.PSCredential -ArgumentList $Username, $SecurePassword
 
$RcptTo = "somebody@mailserver.com"
$Subject = "Yahoo Test"
$Body = "This is a test message"
Send-MailMessage -From $Username -To $RcptTo -Subject $Subject -Body $Body -SmtpServer smtp.mail.yahoo.com -Port 587 -UseSsl -Credential $Credentials

执行后报错:

Send-MailMessage : Unable to read data from the transport connection: net_io_connectionclosed.

解决步骤

1. 改用Yahoo应用专用密码

Yahoo已禁用普通账户密码用于SMTP验证,必须生成应用专用密码:

  • 登录Yahoo账户,进入「账户安全」页面
  • 开启「两步验证」(若未开启)
  • 在「应用专用密码」板块,生成一个针对邮件客户端的专用密码
  • 将代码中的$Password替换为该专用密码

2. 验证网络与端口可用性

  • 确认本地防火墙、杀毒软件或网络代理未拦截587端口
  • 保留-UseSsl参数,Yahoo SMTP强制要求SSL加密连接

3. 替换为System.Net.Mail实现(推荐)

Send-MailMessage是已弃用的cmdlet,改用.NET原生类兼容性更佳:

$Username = "test@yahoo.com"
$AppPassword = "你的应用专用密码"

$smtpClient = New-Object System.Net.Mail.SmtpClient("smtp.mail.yahoo.com", 587)
$smtpClient.EnableSsl = $true
$smtpClient.Credentials = New-Object System.Net.NetworkCredential($Username, $AppPassword)

$mailMessage = New-Object System.Net.Mail.MailMessage
$mailMessage.From = $Username
$mailMessage.To.Add("somebody@mailserver.com")
$mailMessage.Subject = "Yahoo Test"
$mailMessage.Body = "This is a test message"

try {
    $smtpClient.Send($mailMessage)
    Write-Host "邮件发送成功"
} catch {
    Write-Host "发送失败: $_"
}

4. 检查账户访问权限

确保Yahoo账户未限制第三方邮件客户端访问,部分地区账户需在安全设置中开启「允许应用访问」选项

内容的提问来源于stack exchange,提问作者Wendigo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 10:50:22