我最近开始研究用于电子邮件自动化的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)
}