如何向具有基于 CSV 内容的唯一收件人组发送电子邮件

How to send an email to a UNIQUE group of recipients with contents based on CSV

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

我想向经理发送一封电子邮件,其中的内容和收件人是动态基于 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 将发送至 Brian@x.com,内容为 Joe。电子邮件 3 将发送至 Joey@x.com,内容为 Ally、Alex。

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

我什至不知道从哪里开始。我觉得因为它是排序的,所以我应该能够在列表中做一个 foreach unique managermail ...

如有任何帮助,我们将不胜感激。

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

$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()

}

试试这个:

    $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()
    }

这是我终于开始工作的:

$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()
}