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

使用PowerShell脚本发送邮件时遇PSMethod赋值错误求助

解决PowerShell发送邮件时的"Cannot set the Value property for PSMemberInfo object"错误

我一眼就看出问题所在啦——你把方法调用当成属性赋值了!$emailMessageObject.To.Add是PowerShell里的PSMethod(方法对象),不是可以直接用=赋值的属性,这就是报错的核心原因。

错误原因拆解

在.NET的MailMessage对象中,To属性对应一个MailAddressCollection集合类型。要给邮件添加收件人,你需要调用这个集合的Add()方法来传入收件人地址,而不是试图给Add这个方法本身赋值。你写的$emailMessageObject.To.Add = $toEmailAddress完全搞错了语法,PowerShell自然会抛出错误,告诉你没法给PSMethod类型的对象设置Value属性。

修复方案

把错误的赋值语句改成方法调用,直接把收件人地址作为参数传给Add()即可:

$emailMessageObject.To.Add($toEmailAddress)

如果需要添加多个收件人,有两种方式:

  • 多次调用Add()方法,每次传入一个地址:
    $emailMessageObject.To.Add("user1@example.com")
    $emailMessageObject.To.Add("user2@example.com")
    
  • 一次性传入多个用逗号分隔的地址:
    $emailMessageObject.To.Add("user3@example.com", "user4@example.com")
    

完整的发送邮件示例

这里给你一个可以直接参考的完整脚本,避免再踩类似的坑:

# 初始化邮件对象和SMTP客户端
$mailMessage = New-Object System.Net.Mail.MailMessage
$smtpClient = New-Object System.Net.Mail.SmtpClient("smtp.yourdomain.com", 587)

# 配置邮件基本信息
$mailMessage.From = New-Object System.Net.Mail.MailAddress("your-email@yourdomain.com")
$mailMessage.Subject = "PowerShell测试邮件"
$mailMessage.Body = "这是一封通过PowerShell发送的测试邮件内容"

# 正确添加收件人
$recipient = "target-email@example.com"
$mailMessage.To.Add($recipient)

# 配置SMTP服务器认证(按需开启)
$smtpClient.EnableSsl = $true
$smtpClient.Credentials = New-Object System.Net.NetworkCredential("your-email@yourdomain.com", "your-email-password")

# 发送邮件并处理结果
try {
    $smtpClient.Send($mailMessage)
    Write-Host "邮件发送成功!" -ForegroundColor Green
} catch {
    Write-Host "邮件发送失败:$_" -ForegroundColor Red
}

# 清理资源
$mailMessage.Dispose()
$smtpClient.Dispose()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:46:55