使用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
相关产品推荐
相关产品推荐

