Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 用于发送批量电子邮件的PowerShell脚本_Xml_Powershell_Email - Fatal编程技术网

Xml 用于发送批量电子邮件的PowerShell脚本

Xml 用于发送批量电子邮件的PowerShell脚本,xml,powershell,email,Xml,Powershell,Email,我在下面编写了一个脚本,从XML文件中读取电子邮件ID。加载使用组ID筛选的电子邮件ID,然后将电子邮件发送到该ArrayList上的所有电子邮件ID。我不知道下面的问题是什么,我没有收到任何电子邮件 功能测试{ 发送邮件功能{ 参数$smtp、$from、$to、$subject、$body $smtp=新对象系统.Net.Mail.SmtpClient$smtp $mail=新对象System.Net.mail.MailMessage $mail.From=$From $mail.To.Ad

我在下面编写了一个脚本,从XML文件中读取电子邮件ID。加载使用组ID筛选的电子邮件ID,然后将电子邮件发送到该ArrayList上的所有电子邮件ID。我不知道下面的问题是什么,我没有收到任何电子邮件

功能测试{ 发送邮件功能{ 参数$smtp、$from、$to、$subject、$body $smtp=新对象系统.Net.Mail.SmtpClient$smtp $mail=新对象System.Net.mail.MailMessage $mail.From=$From $mail.To.Add$To $mail.Subject=主题位于此处 $mail.Body=这是测试 $smtp。发送$mail } 读取xml文件并将其键入System.xml.XmlDocument [Xml]$XmlData=获取内容Email.Xml $ArrayMail=新对象System.Collections.ArrayList $subject=测试PowerShell电子邮件 $from=a@134.com $smtp=test.test123.com $body=身体在这里 从组id获取电子邮件列表 $ArrayMail=$XmlData.emaillist.group| 其中对象{$\ id-eq IT}| 选择对象emailid $to=新对象System.Collections.ArrayList 将电子邮件ID存储在数组中 对于$i=0;$i-lt$ArrayEmail.emailid.Count;$i++{ $to.Add$ArrayEmail.emailid[$i] } 发送邮件-Smtp$Smtp-从$From-到$To[$i]-主题$Subject-Body$Body } 以下是我的示例XML文件:

a@123.com b@345.com admin@admin.com
不确定我做错了什么或错过了什么,因为一切似乎都很好。但我还是没有收到任何电子邮件。我的smtp都很好,发送者和接收者的电子邮件也都很好。

你那里的东西叫做。for循环完成后,循环变量$i的值是$to加1的最高索引。因此,$to[$i]的计算结果为$null,因为您试图访问ArrayList中不存在的最后一个元素之后的元素,而PowerShell会返回$null,而不是抛出错误

替换此项:

$ArrayEmail = $XmlData.emaillist.group |
              Where-Object {$_.id -eq "IT"} |
              Select-Object emailid
$to = New-Object System.Collections.ArrayList
#store the email ids in array
for ($i = 0; $i -lt $ArrayEmail.emailid.Count; $i++) {
    $to.Add($ArrayEmail.emailid[$i])
}
Send-Mail -Smtp $smtp -From $from -To $to[$i] -Subject $subject -Body $body
为此:

$to = $XmlData.emaillist.group |
      Where-Object {$_.id -eq "IT"} |
      Select-Object -Expand emailid
Send-Mail -Smtp $smtp -From $from -To $to -Subject $subject -Body $body
问题就会消失

要将邮件发送给所有收件人,您需要逐个添加:

function Send-Mail {
    Param($smtp, $from, $to, $subject, $body)
    $smtp = New-Object System.Net.Mail.SmtpClient($smtp)
    $mail = New-Object System.Net.Mail.MailMessage
    $mail.From = $from
    $to | ForEach-Object { $mail.To.Add($_) }
    $mail.Subject = "subject goes here"
    $mail.Body = "This is test"
    $smtp.Send($mail)
}

你所拥有的就是所谓的。for循环完成后,循环变量$i的值是$to加1的最高索引。因此,$to[$i]的计算结果为$null,因为您试图访问ArrayList中不存在的最后一个元素之后的元素,而PowerShell会返回$null,而不是抛出错误

替换此项:

$ArrayEmail = $XmlData.emaillist.group |
              Where-Object {$_.id -eq "IT"} |
              Select-Object emailid
$to = New-Object System.Collections.ArrayList
#store the email ids in array
for ($i = 0; $i -lt $ArrayEmail.emailid.Count; $i++) {
    $to.Add($ArrayEmail.emailid[$i])
}
Send-Mail -Smtp $smtp -From $from -To $to[$i] -Subject $subject -Body $body
为此:

$to = $XmlData.emaillist.group |
      Where-Object {$_.id -eq "IT"} |
      Select-Object -Expand emailid
Send-Mail -Smtp $smtp -From $from -To $to -Subject $subject -Body $body
问题就会消失

要将邮件发送给所有收件人,您需要逐个添加:

function Send-Mail {
    Param($smtp, $from, $to, $subject, $body)
    $smtp = New-Object System.Net.Mail.SmtpClient($smtp)
    $mail = New-Object System.Net.Mail.MailMessage
    $mail.From = $from
    $to | ForEach-Object { $mail.To.Add($_) }
    $mail.Subject = "subject goes here"
    $mail.Body = "This is test"
    $smtp.Send($mail)
}

运行脚本时是否有任何错误,或者只是没有收到电子邮件?在powershell中运行脚本时没有错误。只是不接收电子邮件。看起来没有接收到收件人电子邮件,请将发送邮件行移到其上方的for循环内,然后查看是否有效。您是否有任何特定原因使用System.Net.mail而不是本机send-MailMessage Powershell cmdlet?@ashim是否调用包含发送邮件功能的测试功能?删除函数测试{}并将代码保存在内部。运行脚本时是否有任何错误,或者是否没有收到电子邮件?在powershell中运行脚本时是否没有错误。只是不接收电子邮件。看起来没有接收到收件人电子邮件,请将发送邮件行移到其上方的for循环内,然后查看是否有效。您是否有任何特定原因使用System.Net.mail而不是本机send-MailMessage Powershell cmdlet?@ashim是否调用包含发送邮件功能的测试功能?删除函数测试{}并将代码保存在内部。我可以接收带有更改的电子邮件,但仍然无法解决问题,因为我没有收到该组中所有电子邮件ID的电子邮件,只向列表中的最后一个电子邮件id发送电子邮件。我可以接收带有更改的电子邮件,但仍然无法解决问题,因为我没有向该组中的所有电子邮件id发送电子邮件,只向列表中的最后一个电子邮件id发送电子邮件。