帮同事做了一个在 Excel 中用 VBA 发邮件的程序,逐行读取 Excel 表格记录中的待发邮件主题、内容及收件人进行发送。首先想到也是看看能否使用 Outlook 的组件,网上查了查,果然有,现把代码贴出来如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
'使用 Outlook 来发送邮件了 Sub SendEmailByOutlook() '要能正确发送并需要对Microseft Outlook进行有效配置 On Error Resume Next Dim rowCount, endRowNo Dim objOutlook As New Outlook.Application Dim objMail As MailItem '取得当前工作表与Cells(1,1)相连的数据区行数 endRowNo = Cells(1, 1).CurrentRegion.Rows.Count '创建objOutlook为Outlook应用程序对象 Set objOutlook = New Outlook.Application '开始循环发送电子邮件,比如从第二行开始,第一行是标题 For rowCount = 2 To endRowNo '创建objMail为一个邮件对象 Set objMail = objOutlook.CreateItem(olMailItem) With objMail '设置收件人地址(比如从 Excel 表的第一列“E-mail地址”字段中获得) .To = Cells(rowCount, 1).Value '"fantasia@sina.com" '设置邮件主题(比如从 Excel 表的第二列“邮件主题”字段中获得) .Subject = Cells(rowCount, 2).Value '"邮件主题" '设置邮件内容(比如从 Excel 表的第三列“邮件内容”字段中获得) .Body = Cells(rowCount, 3).Value '"邮件内容" '设置附件(比如从 Excel 表的第四列“附件”字段中获得) .Attachments.Add Cells(rowCount, 4).Value '"c:\\users.ctl" .Send End With '销毁objMail对象 Set objMail = Nothing Next '销毁objOutlook对象 Set objOutlook = Nothing End Sub |
Excel 中贴个按钮,单击事件指向到这个过程。Excel 的 Visual Basic 编辑器中还必须引用 Microsoft Outlook 11.0 Object Library,具体组件名视你安装的 Outlook 版可能有所不同。只能使用 Outlook 而不是 Outlook Express。
您必须对 Outlook 进行了正确的配置,即达到能使用默认帐户发送邮件,上面代码实现的就是使用 Outlook 的默认帐户来发送邮件。
这种方法有一个很要命的问题就是,每发一封的时候会弹出一个 Outlook 的安全提示,如图:
一个个“是” 吧,这一定会让你厌其烦的,有说用 SendKeys 或别的软件来自动“是”,但都不太美妙。还不能真正达到全自动批量发邮件的效果。倒是在 Outlook Express 和 Outlook 2007 的安全设置中有这么一个选项“当别的应用程序试图用我的名义发送电子邮件时警告我(W)” 的可选项,可是一则 VBA 不知如何使用 Outlook Express,二则我电脑里没安装 2007 这么高级版本。所以得另寻他法了,那就是 JMail 组件。
参考:1. 如何利用Excel发邮件(Shell 和 SendKeys 来模拟 Outlook Express 操作 )
2. 巧用Excel发送电子邮件
本文链接 https://yanbin.blog/vba-send-email-outlook/, 来自 隔叶黄莺 Yanbin Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。
多谢!学习了。