2017-05-16 80 views
1

我有一個sql腳本根據特定條件將記錄導入csv。 CSV格式文件通常是這樣的例子:PowerShell Send-MailMessage發送給身體信息不同的多個收件人

Ticket,Last Updated,Priority,Assigned To,Email 
2329,1-12-2017,Medium,Assignee1,[email protected] 
2417,5-23-2016,Low,Assignee1,[email protected] 
2416,4-20-2017,Medium,Assignee2,[email protected] 
2463,8-9-2016,Medium,Assignee2,[email protected] 
2481,3-4-2017,Low,Assignee3,[email protected] 
2499,2-22-2017,Medium,Assignee4,[email protected] 
2500,12-20-2016,High,Assignee5,[email protected] 
2498,11-30-2016,Medium,Assignee5,[email protected] 

注意的電子郵件域可以有相同的電子郵件地址爲多行。

我無法理解如何在PowerShell中解析此數據,以便我可以將行數據發送到該行的Email列中的地址。

但是,當運行此腳本時,我不想將多個電子郵件發送給同一個人。因此,如果Email列在csv中具有相同的值,我希望在電子郵件正文中發送一封包含多行信息的電子郵件,然後再轉到下一個郵件,直到EOF。

在上面的示例csv中,只有一封電子郵件會轉到[email protected],爲Ticket 2329 & 2417數據等等,直到EOF。我正在做一個Order By Email在sql查詢被轉儲到csv,如果這有助於組織進程。

我以前使用PowerShell發送電子郵件,但這些腳本不需要解析特定電子郵件地址的數據,因爲Send-MailMessage中的-to一直是靜態的。從另一個腳本示例:

$FromAddress = "[email protected]" 
$ToAddress  = "[email protected]" 
$Subject  = "Mail message Subject line" 
$SMTPserver  = "smtp server address" 


if ((Get-Item "data.csv").length -gt 0kb) 
{ 
    $html = import-csv -Path .\data.csv | Foreach {$_.web_link= '<a href="{0}">{1}</a>' -f $_.web_link,$_.author;$_} | Foreach {$_.web_link= '<a href="{0}">{1}</a>' -f $_.web_link,$_.title;$_}| 
    Select @{Name="Link"; Expression={$_.web_link}}, @{Name="Author"; Expression={$_.web_link}} | ConvertTo-Html -Head $htmlformat -Body $bodyformat 
    $html = $html -replace "&lt;","<" -replace "&quot;",'"' -replace "&gt;",">" 
    $body = $notice + $html 
    Send-MailMessage -from $FromAddress -to $ToAddress -subject $Subject -bodyashtml ($body | Out-String) -priority High -smtpServer $SMTPserver 
} 
else {exit;} 

作爲PowerShell的新手(最好)我想知道我的選擇是。我假設我將通過csv循環很多,並有可能構建出數組。我只想確保,爲了我自己的教育,這個任務是以最簡單的形式完成的,PowerShell爲我們提供了幫助。

謝謝。

+1

您可以通過'Email' – BenH

+0

感謝這個評論使用'集團Object'到組。對我來說似乎是一件愚蠢的事情,但再一次,PowerShell不是我的特長。我使用您的建議添加了工作代碼作爲答案。 –

回答

1
if ((Get-Item "import.csv").length -gt 0kb) 
{ 
$import = Import-Csv -Path .\import.csv| 
Group-Object -Property Email -AsHashTable 
    foreach ($i in $import.GetEnumerator()){ 
     $html = $($i.Value) | ConvertTo-Html -Head $htmlformat -Body $bodyformat 
     $html = $html -replace "&lt;","<" -replace "&quot;",'"' -replace "&gt;",">" 
     $body = $notice + $html 
     Send-MailMessage -from $FromAddress -to $ToAddress -subject $Subject -bodyashtml ($body | Out-String) -priority High -smtpServer $SMTPserver 
    } 

} 
else {exit;} 

上面是我們如何得到這個工作的片段示例。我忽略了一些html格式變量,因爲它們不重要。我也還沒有測試從-Property Email不發送到一個靜態的電子郵件地址,但該電子郵件地址,我假設有$i更換$ToAddress應該做的,或一些接近。

相關問題