来自 csv/空单元格问题的 PowerShell 多个电子邮件收件人(附件)
PowerShell multiple email recipients (attachment) from csv / empty cell issue
我最近开始研究 PS 电子邮件自动化脚本。
设法将一些东西放在一起,我有 CSV 文件,PowerShell 从那里提取数据(多个收件人、附件等)。
问题是,当某些单元格为空时,脚本将无法运行。
有一个 similar question,但我不确定如何针对我的案例实施解决方案:
$importFile = "Users.csv"
$users = import-csv $importFile | select *
foreach($user in $users)
{
$Name = $user.'Name'
$to = $user.'To'
$to2 = $user.'To2'
$Attachment = $user.'Attachment'
$Attachment2 = $user.'Attachment2'
$write = "Emailing account " + $to + " ..."
Write-Host $write
$body = [string]::join([environment]::newline, (Get-Content -path $emailFile))
$body = $body.Replace('[Name]', $Name)
$mail = New-Object System.Net.Mail.MailMessage
$mail.From = $emailFrom
$mail.To.Add($to)
$mail.To.Add($to2)
$mail.Subject = $emailSubject
$mail.IsBodyHtml = $true
$mail.Body = $body
$mail.Attachments.Add($Attachment)
$mail.Attachments.Add($Attachment2)
$smtp = New-Object System.Net.Mail.SmtpClient
$smtp.Host = $smtpServerHost
$smtp.Port = $smtpServerPort
$smtp.EnableSsl = $smtpServerSsl
$smtp.UseDefaultCredentials = $false
$smtp.Credentials = $credentials
$smtp.Send($mail)
This is how looks CSV file
非常欢迎任何建议 :)
尝试Where-Object
过滤掉行。
$users = Import-Csv $importFile |
Where-Object {$_.Name -ne ""} |
Select-Object *
它的价值:如果整个 "row" 是空白的,您可以将其简化为
...
Where-Object {$_} |
...
执行 IF 函数解决了这个问题。例如,如果 ($to2 -ne '')
正在检查 $to2 单元格是否为空。如果否,则 $mail.To.Add($to2)
。 $Attachment 的情况相同。这是代码:
$mail = New-Object System.Net.Mail.MailMessage
$mail.From = $emailFrom
$mail.To.Add($to)
if ($to2 -ne '') {
$mail.To.Add($to2)
}
$mail.Subject = $emailSubject
$mail.IsBodyHtml = $true
$mail.Body = $body
$mail.Attachments.Add($Attachment)
if ($Attachment2 -ne '') {
$mail.Attachments.Add($Attachment2)
}
我最近开始研究 PS 电子邮件自动化脚本。 设法将一些东西放在一起,我有 CSV 文件,PowerShell 从那里提取数据(多个收件人、附件等)。 问题是,当某些单元格为空时,脚本将无法运行。 有一个 similar question,但我不确定如何针对我的案例实施解决方案:
$importFile = "Users.csv"
$users = import-csv $importFile | select *
foreach($user in $users)
{
$Name = $user.'Name'
$to = $user.'To'
$to2 = $user.'To2'
$Attachment = $user.'Attachment'
$Attachment2 = $user.'Attachment2'
$write = "Emailing account " + $to + " ..."
Write-Host $write
$body = [string]::join([environment]::newline, (Get-Content -path $emailFile))
$body = $body.Replace('[Name]', $Name)
$mail = New-Object System.Net.Mail.MailMessage
$mail.From = $emailFrom
$mail.To.Add($to)
$mail.To.Add($to2)
$mail.Subject = $emailSubject
$mail.IsBodyHtml = $true
$mail.Body = $body
$mail.Attachments.Add($Attachment)
$mail.Attachments.Add($Attachment2)
$smtp = New-Object System.Net.Mail.SmtpClient
$smtp.Host = $smtpServerHost
$smtp.Port = $smtpServerPort
$smtp.EnableSsl = $smtpServerSsl
$smtp.UseDefaultCredentials = $false
$smtp.Credentials = $credentials
$smtp.Send($mail)
This is how looks CSV file
非常欢迎任何建议 :)
尝试Where-Object
过滤掉行。
$users = Import-Csv $importFile |
Where-Object {$_.Name -ne ""} |
Select-Object *
它的价值:如果整个 "row" 是空白的,您可以将其简化为
...
Where-Object {$_} |
...
执行 IF 函数解决了这个问题。例如,如果 ($to2 -ne '')
正在检查 $to2 单元格是否为空。如果否,则 $mail.To.Add($to2)
。 $Attachment 的情况相同。这是代码:
$mail = New-Object System.Net.Mail.MailMessage
$mail.From = $emailFrom
$mail.To.Add($to)
if ($to2 -ne '') {
$mail.To.Add($to2)
}
$mail.Subject = $emailSubject
$mail.IsBodyHtml = $true
$mail.Body = $body
$mail.Attachments.Add($Attachment)
if ($Attachment2 -ne '') {
$mail.Attachments.Add($Attachment2)
}