如何在PowerShell脚本中添加多收件人?解决仅最后一个收件人收信问题
问题原因
你遇到的问题是因为System.Net.Mail.MailMessage的双参数构造函数(From, To)仅接受单个收件人地址字符串,当你传入数组'test1@test.com','test2@test.com'时,它只会把数组的最后一个元素作为收件人,导致第一个邮箱无法收到邮件。
解决方案
修改脚本中创建MailMessage对象的部分,改用To.Add()方法添加收件人即可解决。
方法1:循环添加收件人
##Send email functionality from below line, use it if you want $smtpServer = "" $smtpFrom = "test@test.com" $smtpTo = 'test1@test.com','test2@test.com' $messageSubject = "Servers Health report" # 创建空的MailMessage对象,手动添加发件人和收件人 $message = New-Object System.Net.Mail.MailMessage $message.From = $smtpFrom foreach ($toAddress in $smtpTo) { $message.To.Add($toAddress) } $message.Subject = $messageSubject $message.IsBodyHTML = $true $message.Body = "<head><pre>$style</pre></head>" $message.Body += Get-Content C:\scripts\test.htm $smtp = New-Object Net.Mail.SmtpClient($smtpServer) $smtp.Send($message)
方法2:直接传入数组简化写法
MailMessage.To.Add()方法支持直接传入字符串数组,可省略循环:
##Send email functionality from below line, use it if you want $smtpServer = "" $smtpFrom = "test@test.com" $smtpTo = 'test1@test.com','test2@test.com' $messageSubject = "Servers Health report" $message = New-Object System.Net.Mail.MailMessage $message.From = $smtpFrom $message.To.Add($smtpTo) # 直接传入收件人数组 $message.Subject = $messageSubject $message.IsBodyHTML = $true $message.Body = "<head><pre>$style</pre></head>" $message.Body += Get-Content C:\scripts\test.htm $smtp = New-Object Net.Mail.SmtpClient($smtpServer) $smtp.Send($message)
额外注意事项
- 确保
$smtpServer已正确配置SMTP服务器地址,否则可能导致邮件发送失败或被拦截。 - 检查
$style变量是否已提前定义,避免邮件头部出现空标签。 - 若使用Gmail等第三方邮箱,可能需要启用SMTP权限或使用应用专用密码。
内容的提问来源于stack exchange,提问作者Arunkumar AK
相关产品推荐
相关产品推荐

