2016-10-24 5 views
1

Я не совсем уверен, как сформулировать этот вопрос так, чтобы это имело смысл. У меня есть CSV, который содержит адрес электронной почты пользователя, менеджера и менеджера. Столбцы адреса электронной почты менеджера и менеджера содержат дубликаты, но сортируются. См. Изображение ниже.Как отправить электронное письмо группе UNIQUE с содержимым на основе CSV

enter image description here

Я хочу, чтобы отправить письмо менеджеру с содержимым и получателем динамично на основе CSV.

$Outlook = New-Object -comObject Outlook.Application 
     $Mail = $Outlook.CreateItem(0) 
     $Mail.Recipients.Add("[email protected]") 
     $Mail.Subject = "People" 
     $Mail.Body = "Bob, John, Joe" 
     $Mail.Send() 

Это не проблема, я это понимаю. Что мне нужно знать, так это сделать так, чтобы на одного менеджера отправлялось только одно электронное письмо.

Например, адрес электронной почты 1 будет отправлен на адрес [email protected], а содержание будет Bob, John, Joe. Электронная почта 2 будет отправлена ​​на [email protected] с содержанием Джо. Email 3 будет отправлен на [email protected] с содержанием Ally, Alex.

То, что у меня не может быть, - это одно электронное письмо, отправленное менеджеру на пользователя. Другими словами, Салли получает 3 письма, Joey получает 2.

Я даже не могу понять, с чего начать. Я чувствую, потому что он отсортирован, я должен иметь возможность сделать уникальный список управления в списке ...

Любая помощь будет принята с благодарностью.

ответ

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

} 
+0

Я определенно думаю, что это будет работать с -expandproperty, но я бегу на когда он не распознает несколько управляющих файлов как отдельные. Когда я добавляю в точку останова, он показывает «[email protected] [email protected] [email protected]» Я думал, что Import-csv автоматически попадает в массив ... – Nick

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