PowerShell 语言 批量发送带附件的通知邮件 从 Excel 读取收件人列表

PowerShell阿木 发布于 2 天前 2 次阅读


使用PowerShell批量发送带附件的通知邮件——基于Excel读取收件人列表

在信息化时代,邮件通知是日常工作中不可或缺的一部分。特别是在企业内部,通过邮件发送通知、报告、文件等已经成为一种常见的沟通方式。手动发送邮件不仅效率低下,而且容易出错。本文将介绍如何使用PowerShell结合Excel,实现批量发送带附件的通知邮件。

准备工作

在开始编写代码之前,我们需要做一些准备工作:

1. 安装PowerShell:确保您的计算机上已安装PowerShell。
2. 安装SMTP客户端:在PowerShell中发送邮件需要SMTP客户端的支持,您可以使用如SendGrid、Mailgun等第三方服务,或者使用本地SMTP服务器。
3. Excel文件:准备一个包含收件人列表的Excel文件,列名分别为“收件人”、“主题”和“附件路径”。

PowerShell脚本编写

以下是一个基于PowerShell的脚本示例,用于批量发送带附件的通知邮件:

powershell
引入Excel库
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

获取Excel文件路径
$excelPath = "C:pathtoyourfile.xlsx"

打开Excel文件
$excelApp = New-Object -ComObject Excel.Application
$workbook = $excelApp.Workbooks.Open($excelPath)

获取收件人列表
$sheet = $workbook.Sheets.Item(1)
$range = $sheet.UsedRange
$recipients = @()
for ($row = 2; $row <= $range.Rows.Count; $row++) {
$recipient = $sheet.Cells.Item($row, 1).Value
$subject = $sheet.Cells.Item($row, 2).Value
$attachmentPath = $sheet.Cells.Item($row, 3).Value
if ($recipient -and $subject -and $attachmentPath) {
$recipients += [PSCustomObject]@{
Recipient = $recipient
Subject = $subject
AttachmentPath = $attachmentPath
}
}
}

关闭Excel文件
$workbook.Close()
$excelApp.Quit()

发送邮件
foreach ($recipient in $recipients) {
设置SMTP服务器信息
$smtpServer = "smtp.example.com"
$smtpPort = 25
$smtpUser = "username@example.com"
$smtpPassword = "password"

创建SMTP客户端
$smtpClient = New-Object Net.Mail.SmtpClient($smtpServer, $smtpPort)
$smtpClient.EnableSsl = $true
$smtpClient.Credentials = New-Object System.Net.NetworkCredential($smtpUser, $smtpPassword)

创建邮件对象
$mail = New-Object Net.Mail.MailMessage
$mail.From = "sender@example.com"
$mail.To.Add($recipient.Recipient)
$mail.Subject = $recipient.Subject
$mail.Body = "请查收附件。"

添加附件
if (Test-Path $recipient.AttachmentPath) {
$mail.Attachments.Add($recipient.AttachmentPath)
}

发送邮件
try {
$smtpClient.Send($mail)
Write-Host "邮件发送成功:$($recipient.Recipient)"
} catch {
Write-Host "邮件发送失败:$($recipient.Recipient) - $_"
}
}

清理资源
$smtpClient.Dispose()

脚本说明

1. 引入Excel库:使用`Add-Type`命令引入System.Windows.Forms和System.Drawing库,以便操作Excel文件。
2. 获取Excel文件路径:设置Excel文件的路径。
3. 打开Excel文件:使用`New-Object`创建Excel应用程序对象,并打开Excel文件。
4. 获取收件人列表:遍历Excel文件中的收件人列表,并将收件人信息存储在`$recipients`数组中。
5. 关闭Excel文件:关闭Excel文件并释放资源。
6. 设置SMTP服务器信息:设置SMTP服务器的地址、端口、用户名和密码。
7. 创建SMTP客户端:使用`New-Object`创建SMTP客户端对象,并设置SSL和认证信息。
8. 创建邮件对象:创建邮件对象,并设置发件人、收件人、主题和正文。
9. 添加附件:检查附件路径是否存在,如果存在则添加附件。
10. 发送邮件:使用`Send`方法发送邮件,并捕获异常信息。
11. 清理资源:释放SMTP客户端资源。

总结

本文介绍了如何使用PowerShell结合Excel,实现批量发送带附件的通知邮件。通过编写简单的脚本,我们可以轻松地完成邮件发送任务,提高工作效率。在实际应用中,您可以根据需要修改脚本,以适应不同的场景和需求。