通过脚本来发送邮件可以实现WORD中邮件合并中没有的功能,诸如:
- 抄送,密件抄送
- 添加一个或多个附件
先决条件
- Windows 7 + Outlook 2010
- 允许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】
额外说明,
在正式发送请,请尽量在名单中只放两条测试记录,待测试通过后,再使用正式的名单。
如果遇到返回红色字体的报错信息,请仔细检查脚本内容