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

来源:百度文库 编辑:神马文学网 时间:2024/04/28 15:57:40
帮同事做了一个在 Excel 中用 VBA 发邮件的程序,逐行读取 Excel 表格记录中的待发邮件主题、内容及收件人进行发送。首先想到也是看看能否使用 Outlook 的组件,网上查了查,果然有,现把代码贴出来如下:
01.'使用 Outlook 来发送邮件了
02.Sub SendEmailByOutlook()
03.
04.    '要能正确发送并需要对Microseft Outlook进行有效配置
05.    On Error Resume Next
06.    Dim rowCount, endRowNo
07.    Dim objOutlook As New Outlook.Application
08.    Dim objMail As MailItem
09.
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.
47.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 组件。