如何向包含基于CSV的内容的UNIQUE收件人组发送电子邮件

时间:2016-10-24 14:00:12

标签: email powershell powershell-v5.0

我不确定如何对这个问题进行说明,这样才有意义。 我有一个包含用户,经理和经理电子邮件地址的CSV。 Manager和Manager电子邮件地址列将包含重复项,但已排序。见下图。

enter image description here

我想向管理员发送一封电子邮件,内容和收件人动态地基于CSV。

$Outlook = New-Object -comObject Outlook.Application 
         $Mail = $Outlook.CreateItem(0) 
         $Mail.Recipients.Add("sally@x.com")
         $Mail.Subject = "People" 
         $Mail.Body = "Bob, John, Joe"
         $Mail.Send()

这不是问题,我理解。我需要知道的是,每个经理只发送一封电子邮件。

例如,电子邮件1将发送到Sally@x.com,内容将是Bob,John,Joe。电子邮件2将以内容Joe发送至Brian@x.com。电子邮件3将发送至Joey@x.com,内容为Ally,Alex。

我不能拥有的是每位用户发送给经理的一封电子邮件。换句话说,莎莉收到3封电子邮件,乔伊收到2封。

我甚至无法弄清楚从哪里开始。我觉得因为它已经排序了,我应该能够在列表中做一个foreach独特的managermail ...

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

这样的事情应该会有所帮助。

$uniqMailList = Import-Csv .\your.csv | Select -expand ManagerMail -Unique 

foreach ($mailItem in $uniqMailList)
{
    $names = Import-Csv .\your.csv | Where-Object {$_.ManagerMail -eq "$mailItem"} | Select -expand User;

     $Outlook = New-Object -comObject Outlook.Application 
       $Mail = $Outlook.CreateItem(0) 
       $Mail.Recipients.Add($mailItem)
       $Mail.Subject = "People" 
       $Mail.Body = $names
       $Mail.Send()

}

答案 1 :(得分:0)

试试这个:

    $Outlook = New-Object -comObject Outlook.Application
    $liste=import-csv -Path C:\temp\myliste.csv -Delimiter ";" | group ManagerMail | select name, @{N="Users";E={$_.group.User -join ", "}}
    foreach ($item in $liste)
    {
           $Mail = $Outlook.CreateItem(0) 
           $Mail.Recipients.Add($item.Name)
           $Mail.Subject = "People" 
           $Mail.Body = $item.Users
           $Mail.Send()
    }

答案 2 :(得分:0)

这就是我最终的工作:

$file = Import-Csv C:\TEST.CSV |
select -Expand managermail -Unique 

foreach ($item in $file)
{
    $names = Import-Csv C:\TEST.CSV | Where-Object {$_.ManagerMail -eq "$item"} | Select -expand user

    $Outlook = New-Object -comObject Outlook.Application 
    $Mail = $Outlook.CreateItem(0) 
    $Mail.Recipients.Add($item)
    $Mail.Subject = "People" 
    $Mail.Body = "$names"
    $Mail.Send()
}