我尝试在PowerShell中向多个收件人发送电子邮件。
我知道PowerShell 1.0方式,但我不想使用它。
我的电子邮件功能如下所示
function Send-Mail() {
Param (
# email attributes
[string]$smtpServer,
[string]$from,
[string[]]$to,
[string]$subject,
[string]$body
)
Send-MailMessage -To $to -Subject $subject -BodyAsHtml $body -SmtpServer $smtpServer -From $from
}
我可以实现我想做的事情:
$smtpServer = "email.server.local"
$from = "sender@email.com"
$subject = "Subject"
$body = "Test"
Send-Mail $smtpServer $from ("user1@email.com", "user2@email.com") $subject $body
..但如果我把
$to = "user1@email.com", "user2@email.com"
Send-Mail $smtpServer $from $to $subject $body
邮件只发送给第二个收件人
如果我在函数中本地设置$to
,这也可以正常工作,所以问题是将参数传递给函数。
答案 0 :(得分:0)
$to = @("user1@email.com", "user2@email.com")
会将$to
设置为数组
答案 1 :(得分:0)
您在此处列出的代码应该运行得很好。 PowerShell在打字时非常宽容,它将为您提供最佳选择。但是,您可以将自己投射为[string]
,例如我怀疑您在托管之前在会话中的某个时刻做了什么。请考虑以下示例
PS C:\Users\matt> $to = "user1@email.com", "user2@email.com"
PS C:\Users\matt> $to.GetType().Fullname
System.Object[]
PS C:\Users\matt> [string]$to = "user1@email.com"
PS C:\Users\matt> $to.GetType().Fullname
System.String
PS C:\Users\matt> $to = "user1@email.com", "user2@email.com"
PS C:\Users\matt> $to.GetType().Fullname
System.String
请注意,在最后一个集合中,您可能期望System.Object[]
,但由于它在较早的行中被强烈转换为保持该类型,直到它被删除。
检查变量
时也可以看到这一点PS C:\Users\mcameron> Get-Variable to | fl
Name : to
.... output truncated ...
Attributes : {System.Management.Automation.ArgumentTypeConverterAttribute}
这里的关键点是强大演员之后出现的属性System.Management.Automation.ArgumentTypeConverterAttribute
。在会话期间或代码执行期间,您可以使用Remove-Variable to
简单地删除变量,这样您就可以重新开始。
答案 2 :(得分:0)
我这样发了它就像一个魅力。 PS v4,Windows Server 2012
Send-MailMessage -To "firstemail@domain.com", "secondemail@domain2.com" -Body "TEST" -From "test@domain.com" -Subject "TEST" -SmtpServer smarthost.domain.com
为了您的功能目的,我会将电子邮件作为数组提交。这对我也有用。
$array = New-Object System.Collections.ArrayList
$array += "email1@domain1.com"
$array += "email2@domain2.com"
Send-MailMessage -To $array -Body "TEST" -From "test@domain.com" -Subject "TEST" -SmtpServer smarthost.domain.com
......最终,这对我来说很适合使用你的功能。
function Send-Mail() {
Param (
# email attributes
[string]$smtpServer,
[string]$from,
[string[]]$to,
[string]$subject,
[string]$body
)
Send-MailMessage -To $to -Subject $subject -BodyAsHtml $body -SmtpServer $smtpServer -From $from
}
$array = New-Object System.Collections.ArrayList
$array += "email1@domain1.com"
$array += "email2@domain2.com"
Send-Mail -smtpServer "smarthost.domain.com" `
-from "test@domain.com" `
-to $array `
-subject "Test" `
-body "TEST"