来自 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)
        }