使用脚本发送邮件工具(可批量发送附件)

通过脚本来发送邮件可以实现WORD中邮件合并中没有的功能,诸如:

  • 抄送,密件抄送
  • 添加一个或多个附件

先决条件

  1. Windows 7 + Outlook 2010
  2. 允许PowerShell 执行脚本文件
    ## 类似配置邮箱,每台电脑只需要执行一次即可,无需反复执行
    a)使用管理员权限运行 PowerShell(也在可以先运行CMD,然后输入PowerShell)
    b)执行命令 Set-ExecutionPolicy RemoteSigned

准备步骤

1.名单

和邮件合并一样,我们需要使用Excel来准备一份名单,将这个表格另存为 NameList.csv (即用逗号分隔的CSV),后面供脚本来调用。必要的字段如下:

  • Name用来替换邮件正文中的称谓
  • Email收件人地址
  • Manager抄送人

2.邮件正文

使用WORD编辑一份需要发送的邮件正文,其中称谓使用 XXX来代替。将写好的文档另存为[网页]格式。

3.打开PowerShell脚本编辑器,

在开始菜单的搜索框中输入 PowerShell ISE,然后执行回车,或在搜索结果中打开【Windows PowerShell ISE】

可以在【文件】菜单中选择【新建】一个脚本,或【打开】已有的脚本,如果你是新建了一个脚本,那么请将下面分割线之间的内容复制到脚本编辑器中

## Define Path and Subject…

[string]$AttachmentPath1 = “D:\PS1\Tips_Win7LocateFiles.pdf”

[string]$AttachmentPath2 = “D:\PS1\TestMe.txt”

[string]$NameListPath = “D:\PS1\NameList.csv”

[string]$htmlPath = “D:\PS1\html.htm”

[string]$Subject = “PS1 Script TestMail 5”

 

## Begin

$Outlook = New-Object -comObject Outlook.Application

Import-Csv -Path $NameListPath | ForEach-Object{

Write-Host “Starting…”

Write-Host $_.”Name” $_.”Email” $_.”Manager”

## replace the name

$html = Get-Content $htmlPath

$html = $html -replace “xxx”,$_.”Name”

## send

$mail = $Outlook.CreateItem(0)

$Mail.Recipients.Add($_.”Email”)

$Mail.Cc = $_.”Manager”

$Mail.Subject = $Subject

$Mail.Attachments.Add($AttachmentPath1)

$Mail.Attachments.Add($AttachmentPath2)

$Mail.HTMLBody = $html | Out-String

$Mail.Send()

## finished

Remove-Variable html

}

4. 调整参数

在执行前,需要根据需要修改脚本的定义的内容。

附件:

修改附件在电脑中的绝对路径。
[string]$AttachmentPath1 = “D:\PS1\Tips_Win7LocateFiles.pdf”
[string]$AttachmentPath2 = “D:\PS1\TestMe.txt”

如果没有附件,或只有一个附件,抑或有多个附件,请酌情移除,减少或增加下面的配置条目

$Mail.Attachments.Add($AttachmentPath1)
$Mail.Attachments.Add($AttachmentPath2)

定义邮件的变量:

保存的NameList.csv 的路径:
[string]$NameListPath = “D:\PS1\NameList.csv”

保存的网页文件的路径:
[string]$htmlPath = “D:\PS1\html.htm”

此次邮件的主题:
[string]$Subject = “PS1 Script TestMail 5”

5.执行

可以点击执行按钮,也可以按键盘上的【F5】

额外说明,
在正式发送请,请尽量在名单中只放两条测试记录,待测试通过后,再使用正式的名单。
如果遇到返回红色字体的报错信息,请仔细检查脚本内容