PowerShell来自csv /空单元格问题的多个电子邮件收件人(附件)



我最近开始研究用于电子邮件自动化的PS脚本。设法将一些东西放在一起,我有 CSV 文件,PowerShell 正在从中提取数据(多个收件人、附件等(。问题是,当某些单元格为空时,脚本将不起作用。有一个类似的问题,但我只是不确定如何在我的情况下实施解决方案:

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

这是CSV文件的外观

任何建议都非常受欢迎:)

尝试Where-Object过滤掉行。

$users = Import-Csv $importFile |
Where-Object {$_.Name -ne ""} |
Select-Object *

对于它的价值:如果整个"行"都是空白的,您可以将其快捷方式简单地为

...
Where-Object {$_} |
...

实现 IF 函数解决了这种情况。例如,如果($to2 -ne '')正在检查 $to 2 单元格是否为空。如果否,则$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)
        }

最新更新