应张老师的需求,修改制作了一个可以批量发送带附件的电子邮件VBA。

目的:给N多人发送电子邮件,而不是抄送模式,并带有对方的称谓。

实现:

用到Word的邮件合并功能,以及调用Outlook发送邮件。不过VBA我不太懂,只能用现有的改,有点繁琐。

步骤:

1.

Word建立一个表,第一列为表头,下面为每个人的记录,从第四列开始为附件列,需要加几个附件,就添加几个列,可以留空,像第五列一样:

Name

Title

Email

Attachment

Xiao Ma

PhD.

e:\test.txt

Copper

Dr.

e:\test2.txt

Marry

Miss.

e:\test.txt

2. 保存该word文件。

3. 新建一个Word文档,我用的是word2010版本,选择邮件选项卡。

4. 选择收件人,使用现有列表,打开之前编辑的word文件

5. 使用插入合并域功能,编辑邮件正文:

如:

Dear

<

><>

I’m mxio.

Good 2 c u at 9t.

Good

Luck!

mxio

2012.11.13

6. 点击预览结果,更新域

7. 启动编辑宏功能,键盘按ALT+F11

8. 工具\引用添加 Microsoft Outlook 14.0 Object Library

9. 新建模块添加如下代码:

Sub eMailMergeWithAttachments()

Dim docSource As Document, docMaillist As Document

Dim rngDatarange As Range

Dim i As Long, j As Long

Dim lRecordCount As Long

Dim bStarted As Boolean

Dim oOutlookApp As Outlook.Application

Dim oItem As Outlook.MailItem

Dim oAccount As Outlook.Account

Dim sMySubject As String, sMessage As String, sTitle As

String

'将当前文档设置为源文档(主文档)

Set docSource = ActiveDocument

'检查Outlook是不是打开了。如果未打开的话,就打开新的Outlook

On

Error Resume Next

Set oOutlookApp = GetObject(, "Outlook.Application")

If

Err <> 0 Then

Set oOutlookApp = CreateObject("Outlook.Application")

bStarted = True

End If

'打开保存有客人的邮件地址和需要发送的附件的路径的word文档。

With Dialogs(wdDialogFileOpen)

.Show

End With

'将该文档设置为客户邮件(附件)列表文档

Set docMaillist = ActiveDocument

'设置发送邮件的账户(账户必须已经在Outlook中设置好了)

'注意:如果你的Outlook版本低于2007,使用设置发送邮件的账户可能会导致错误,

'建议将下面的Set oAccount =

oOutlookApp.Session.Accounts.Item("someone@examplemail.com")语句删除

Set oAccount = oOutlookApp.Session.Accounts.Item("someone@examplemail.com")

'显示一个输入框,询问并让用户输入邮件主题

sMessage = "请为要发送的邮件输入邮件主题。"

sTitle = "输入邮件主题"

sMySubject = InputBox(sMessage, sTitle)

'循环查找源文档中所有的节(每一节为一封邮件内容),以及循环查找邮件列表文档中所有的客户信息,

'以便用于插入到生成的邮件中

'获取需要发送的邮件数,并将当前节置为第一条记录

lRecordCount

= docMaillist.Tables(1).Rows.Count

docSource.MailMerge.DataSource.ActiveRecord =

wdFirstRecord

'第一列为表头,需跳过

For j = 2 To

lRecordCount

Set oItem = oOutlookApp.CreateItem(olMailItem)

With oItem

'注意:如果你的Outlook版本低于2007,使用设置发送邮件的账户可能会导致错误,

'建议将下面的.SendUsingAccount = oAccount语句删除

.SendUsingAccount = oAccount

.Subject = sMySubject

'正文内容,节号1的文字

.Body = docSource.Sections(1).Range.Text

Set rngDatarange = docMaillist.Tables(1).Cell(j,

3).Range

rngDatarange.End = rngDatarange.End - 1

.To = rngDatarange

For i = 4 To docMaillist.Tables(1).Columns.Count

Set rngDatarange = docMaillist.Tables(1).Cell(j,

i).Range

rngDatarange.End = rngDatarange.End - 1

.Attachments.Add Trim(rngDatarange.Text), olByValue, 1

Next i

.Send

End With

Set oItem = Nothing

'Word邮件文档下一节

docSource.MailMerge.DataSource.ActiveRecord =

wdNextRecord

Next j

docMaillist.Close wdDoNotSaveChanges

'如果Outlook是由该宏打开的,则关闭Outlook

If

bStarted Then

oOutlookApp.Quit

End If

MsgBox "共发送了 " & lRecordCount - 1 &

" 封邮件。"

'清空Outlook实例

Set oOutlookApp = Nothing

End Sub

10. 执行该代码。

mxio

2012.11.13

________________________________2012.12.6_______________________________

实践证明还是excel的好些,改了改:

Sub sendmail()

Dim xlApp

As New Excel.Application

Dim

oOutlookApp As Outlook.Application

Dim

docSource As Document

Dim colCount

As Long, rowCount As Long

Dim

lRecordCount As Long, endColNo As Long

Dim bStarted

As Boolean

Dim oItem

As Outlook.MailItem

Dim oAccount

As Outlook.Account

Dim

sMySubject As String, sMessage As String, sTitle As String,

sMailList As String

'将当前文档设置为源文档(主文档)

Set

docSource = ActiveDocument

'获取当前excel工作簿路径

sMailList =

docSource.MailMerge.DataSource.Name

'检查Outlook是不是打开了。如果未打开的话,就打开新的Outlook

On Error

Resume Next

Set

oOutlookApp = GetObject(, "Outlook.Application")

If Err

<> 0 Then

Set oOutlookApp = CreateObject("Outlook.Application")

bStarted = True

End If

'打开保存有客人的邮件地址和需要发送的附件的路径的excel文档。

Dim wb As

Excel.Workbook

Set wb =

xlApp.Workbooks.Open(sMailList)

xlApp.Visible = Flase

'设置发送邮件的账户(账户必须已经在Outlook中设置好了)

'注意:如果你的Outlook版本低于2007,使用设置发送邮件的账户可能会导致错误,

'建议将下面的Set oAccount = oOutlookApp.Session.Accounts.Item("someone@examplemail.com")语句删除

Set

oAccount = oOutlookApp.Session.Accounts.Item("someone@examplemail.com")

'显示一个输入框,询问并让用户输入邮件主题

sMessage

= "请为要发送的邮件输入邮件主题。"

sTitle =

"输入邮件主题"

'sMySubject = InputBox(sMessage, sTitle)

'免打扰模式设置邮件主题

sMySubject =

"test"

'循环查找源文档中所有的节(每一节为一封邮件内容),以及循环查找邮件列表文档中所有的客户信息,

'以便用于插入到生成的邮件中

'获取需要发送的邮件数,列数,并将当前节置为第一条记录

lRecordCount

= wb.Sheets("Sheet1").Cells(1, 1).CurrentRegion.Rows.Count

endColNo =

wb.Sheets("Sheet1").Cells(1, 1).CurrentRegion.Columns.Count

docSource.MailMerge.DataSource.ActiveRecord = wdFirstRecord

'第一列为表头,需跳过

For rowCount

= 2 To lRecordCount

Set oItem = oOutlookApp.CreateItem(olMailItem)

With oItem

'注意:如果你的Outlook版本低于2007,使用设置发送邮件的账户可能会导致错误,

'建议将下面的.SendUsingAccount = oAccount语句删除

.SendUsingAccount = oAccount

.Subject = sMySubject

'使用纯文本格式,正文内容,节号1的文字

'.Body = docSource.Sections(1).Range.Text

'正文使用HTML代码格式,可保留排版格式,用论坛上的文本编辑器可轻松获取HTML代码

.HTMLBody = docSource.Sections(1).Range.Text

'如果excel数据结构发生改变,那么请修改此次email地址所在列数,默认为4

.To = wb.Sheets("Sheet1").Cells(rowCount, 4)

'如果excel数据结构发生改变,那么请修改此次附件地址所在列数,默认为5

For colCount = 5 To endColNo

.Attachments.Add Trim(wb.Sheets("Sheet1").Cells(rowCount,

colCount))

Next colCount

'发送 or 仅显示 or 保存草稿箱,重要邮件,推荐使用 .Display模式,确认后点击发送即可

.Send

'.Display

'.Save

End With

Set oItem = Nothing

'Word邮件文档下一节

docSource.MailMerge.DataSource.ActiveRecord = wdNextRecord

Next

rowCount

xlApp.Quit

'如果Outlook是由该宏打开的,则关闭Outlook

If

bStarted Then

' oOutlookApp.Quit

End If

MsgBox "共发送了

" & lRecordCount - 1 & "

封邮件。"

'清空Outlook实例

Set

oOutlookApp = Nothing

Set xlApp =

Nothing

End Sub

word合并邮件无法发送html,Word邮件合并批量发送带附件的邮件相关推荐

  1. php邮箱文件发送源码,php简单实现发送带附件的邮件

    本文实例讲述了php简单实现发送带附件的邮件.分享给大家供大家参考.具体如下: 下面是静态html代码: 带附件的邮件发送 发送人: 收件人: 邮件主题: 邮件内容: 附件上传: sendmail.p ...

  2. SpringBoot中整合Mail实现发送带附件的邮件

    场景 项目搭建专栏: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/column/info/35688 实现最简单的带标题以及文本内容的邮件发送: https:/ ...

  3. python菜谱发送到邮箱_Python菜谱5:发送带附件的邮件

    我们平时需要使用 Python 发送各类邮件,这个需求怎么来实现?答案其实很简单,smtplib 和 email库可以帮忙实现这个需求.smtplib 和 email 的组合可以用来发送各类邮件:普通 ...

  4. java 邮件 附件_java中javamail发送带附件的邮件实现方法

    本文实例讲述了java中javamail发送带附件的邮件实现方法.分享给大家供大家参考.具体分析如下: JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理em ...

  5. 利用Jmail发送带附件的邮件时乱码的解决方案

    今天在利用Jmail发送带附件的邮件时,一直收不到附件,而是得到一些"乱码"如下:This is a multipart message in MIME format. ----N ...

  6. mailgun php版本,php – Mailgun发送带附件的邮件

    我正在尝试使用mailgun发送带附件的邮件. 邮件本身很好,但它缺少附件. 同样在mailgun日志中,它显示正常,但附件数组为空. 我用example.com替换了我的凭证. 该文件放在子目录中并 ...

  7. 带附件的邮件的发送方法

    大家好,我是天空之城,今天给大家带来发送带附件的邮件方法.附件可以是图片,音频,表格,视频,pdf都可以. 感谢博友「Samaritan·J」 import smtplib # smtplib 用于邮 ...

  8. java 发送邮件添加附件,Java实现带附件的邮件发送功能

    这篇文章主要为大家详细介绍了Java实现带附件的邮件发送功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了Java实现邮件发送功能的具体代码,供大 ...

  9. Zabbix发送带附件的邮件

    Zabbix告警由于内容主体有诸多限制,很难传达所有的告警信息,可以通过添加附件的方式将详细信息发送给接收人,比如说要发送的文件存在apache文件服务器中,这个文件内容每隔一段时间会变动,我们可以将 ...

  10. 用simple mapi 发送一个带附件的邮件

    使用 MAPI 实现邮件发送 原 作:deltacat,修改中 最后更新:2004.09.16 版权声明:随意转载,敬请保持文档及说明完整性 关键字: VC 邮件发送 MAPI 一.简述 实际上,本文 ...

最新文章

  1. 成就更卓越、更有意义的人生
  2. 【java】java内存模型 (1)--基础
  3. Linux Shell 编程学习总结
  4. Java StringBuffer的用法
  5. 用 Python 分析了 20 万场吃鸡数据,看看玩家群体是怎么样的
  6. 练习_用if语句实现考试成绩划分
  7. SAP SRM ABAP Webdynpro和CFCA usb key集成的一个原型开发
  8. 详解公钥、私钥、数字证书的概念
  9. 怎样用 Python 控制图片人物动起来?一文就能 Get!
  10. 回顾|腾讯AI打败王者荣耀职业队,AI训练一天等于人类440年
  11. centos ssh服务开启
  12. 第三阶段应用层——1.7 数码相册—电子书(6)—支持远程打印信息
  13. 性能强大的家庭服务器,家庭服务器解决方案——硬件篇
  14. 配置Eureka-client报EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT...
  15. 统信(UOS)虚拟机网络设置
  16. 腾讯微信客服电话号码是多少
  17. DAO设计模式之禅之数据库万能查询操作
  18. 统计学家的矫情和人工智能专家的反驳
  19. 单片机编程软件很简单(八),Keil单片机编程软件辅助功能讲解
  20. 修改 oracle 字符 zhs,修改Oracle数据库的字符集(UTF8→ZHS16GBK)

热门文章

  1. ip2977_desc.TXT
  2. python技巧 黑魔法指南笔记
  3. Jquery获取一组Radio的选中值
  4. Basler相机QT代码vs
  5. php中对数组进行转码,PHP 数组转码
  6. 会话验证调度器_用视力调度建立会话式预订机器人
  7. 游戏中常用音乐风格分析
  8. 国内医院临床自闭症病例分享:大脑自闭了,为什么是肠道的锅?
  9. python ogr_python gdal教程之:用ogr读写矢量数据
  10. root的家目录和普通用户的家目录