VBA 中发送邮件(一. 使用 Outlook 组件)

帮同事做了一个在 Excel 中用 VBA 发邮件的程序,逐行读取 Excel 表格记录中的待发邮件主题、内容及收件人进行发送。首先想到也是看看能否使用 Outlook 的组件,网上查了查,果然有,现把代码贴出来如下:

 1'使用 Outlook 来发送邮件了
 2Sub SendEmailByOutlook()
 3
 4    '要能正确发送并需要对Microseft Outlook进行有效配置
 5    On Error Resume Next
 6    Dim rowCount, endRowNo
 7    Dim objOutlook As New Outlook.Application
 8    Dim objMail As MailItem
 9
10    '取得当前工作表与Cells(1,1)相连的数据区行数
11    endRowNo = Cells(1, 1).CurrentRegion.Rows.Count
12
13    '创建objOutlook为Outlook应用程序对象
14    Set objOutlook = New Outlook.Application
15
16    '开始循环发送电子邮件,比如从第二行开始,第一行是标题
17    For rowCount = 2 To endRowNo
18
19        '创建objMail为一个邮件对象
20        Set objMail = objOutlook.CreateItem(olMailItem)
21        With objMail
22
23            '设置收件人地址(比如从 Excel 表的第一列“E-mail地址”字段中获得)
24            .To = Cells(rowCount, 1).Value '"fantasia@sina.com"
25
26            '设置邮件主题(比如从 Excel 表的第二列“邮件主题”字段中获得)
27            .Subject = Cells(rowCount, 2).Value '"邮件主题"
28
29            '设置邮件内容(比如从 Excel 表的第三列“邮件内容”字段中获得)
30            .Body = Cells(rowCount, 3).Value '"邮件内容"
31
32            '设置附件(比如从 Excel 表的第四列“附件”字段中获得)
33            .Attachments.Add Cells(rowCount, 4).Value '"c:\\users.ctl"
34
35            .Send
36
37         End With
38
39         '销毁objMail对象
40         Set objMail = Nothing
41
42     Next
43
44     '销毁objOutlook对象
45     Set objOutlook = Nothing
46
47End 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's Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。