分享

【Excel VBA】- VBA结合Outlook批量发送邮件(一)

 L罗乐 2017-04-25


        一提到批量发送邮件,可能很多小伙伴就想到Word里面的邮件合并功能,可以批量发送邮件和工资条等。还没学习过的小伙伴请移步:【Word技巧】- 教会你99%的人都不会的“邮件合并”功能

        从今天图文的标题就可以看出,是使用VBA结合Outlook进行批量邮件发送,所以在发送之前就需要先配置Outlook,配置一个可以用来发送邮件的邮箱,具体配置如下:

        1 点击【文件】菜单,选择【信息】,点击【添加帐户】,进入新帐户添加向导。



        2 在弹出的对话框中选择【手动设置或其他服务器类型】,点击【下一步】。



        3 选择【POP或IMAP】,点击【下一步】。



        4 按下图所示填入信息,然后点击【其他设置】。



        5 在【其他设置】里找到【发送服务器】,选中【我的发送服务器(SMTP)要求验证】,具体如下图所示:



        6 在【其他设置】里找到【高级】,具体设置如下图所示:



        7 点击【确定】,回到第4步,点击【下一步】进行自动测试账户,测试成功后如下图所示:



        8 此时邮箱就会收到Outlook发送的测试消息,测试邮件截图如下:



        Outlook邮箱配置好了后,就可以使用如下的代码进行批量发送邮件了。使用Excel VBA批量发送的核心代码如下:


'*******************************************************************'

'经测试在OUTLOOK 2000中不会显示警告窗口.

'引用:Microseft Outlook *.0 Object Library

'需要注意一点 , 邮件的标题, 否则不能自动放送!

'**********************************************************************

Public Function SendMail(strTo As String, strSubject As String, strBody As String, Optional strAttachment As String = '', Optional strCC As String = '', Optional strBCC As String = '') As Integer


    On Error GoTo errHandler

    '定义outlook的对象变量

    Dim objOutlook As New Outlook.Application

    '定义outlook邮件的对象变量

    Dim objMail As Mailitem

    

    '创建objOutlook为Outlook应用程序对象

    Set objOutlook = New Outlook.Application

    '创建objMail为一个邮件对象

    Set objMail = objOutlook.CreateItem(olMailitem)

    

    '循环添加附件

    Dim strArray

    strArray = Split(strAttachment, '|')

    For i = 0 To UBound(strArray)

        objMail.Attachments.Add ThisWorkbook.Path & '\' & strArray(i) '如果有多个附件,分别添加

    Next

    

    objMail.To = strTo '设置收信人的邮箱

    If ChkEmail(strCC) = 0 Then

        objMail.CC = strCC '设置抄送的邮箱

    End If

    

    If ChkEmail(strBCC) = 0 Then

        objMail.BCC = strBCC '设置密送的邮箱

    End If

    

    '设置邮件的主题

    If strSubject <> '' Then

        objMail.Subject = strSubject

    Else

        objMail.Subject = '主题'

    End If

    

    '设置邮件正文

    objMail.Body = strBody

    

    With objMail

        '新建邮件窗口显示,如果不熟练可以取消注释

        '.Display

        '邮件发送

        .Send

    End With

    '销毁objMail对象

    Set objMail = Nothing

    '销毁objOutlook对象

    Set objOutlook = Nothing

    SendMail = 0

    Exit Function

    

errHandler:

    SendMail = 1

End Function


        如上所示,该代码为一个函数,创建了Outlook和邮件对象,然后进行设置收件人、主题、正文、附件等信息。代码还对邮件的邮箱使用函数ChkEmail进行正则表达式验证,具体代码如下:


'检查邮件是否规范

Function ChkEmail(str As String)

    Dim reg

    Set reg = CreateObject('vbscript.regexp')

    reg.Pattern = '^[\w.-] @[\w.-] $'

    If reg.test(str) Then

        ChkEmail = 0

    Else

        ChkEmail = 1

    End If

End Function


        如果仅仅使用上面两个自定义函数,还无法发送邮件,因为没有填充相应的内容,下图是我制作的邮件信息



        那有了邮件信息和上面两个自定义函数,该如何批量发送邮件呢?还需要定义一个过程,用来循环发送邮件,具体代码如下:


Sub 发送邮件()

    Dim ierr As Integer

    Dim iCount As Integer, iTotal As Integer

    

    Worksheets('Sheet1').Select

    Range('A2').Select

    

    iCount = 0

    iTotal = 0

    Do While ActiveCell.Value <> ''

        ierr = SendMail(ActiveCell.Value, ActiveCell.Offset(0, 1).Value, ActiveCell.Offset(0, 2).Value, ActiveCell.Offset(0, 3).Value, ActiveCell.Offset(0, 4).Value, ActiveCell.Offset(0, 5).Value)

        If ierr = 0 Then

            iCount = iCount 1

        End If

        iTotal = iTotal 1

        ActiveCell.Offset(1, 0).Select

    Loop

    

    MsgBox '共发送' & iTotal & '个,成功发送邮件' & iCount & '个!'

End Sub


        如上的代码还是比较好理解的,就是使用do while循环从工作表Sheet1中获取需要发送的邮件信息并发送,最后弹出一个对话框用来显示当前一共发送多少邮件,其中成功了多少,说了那么多一起来演示一下吧。



        咦,为啥运行宏代码出现用户定义类型未定义错误呢?因为我们在Excel用到了Outlook的资源,所以必须先引用后才能使用,具体引用方法详见如下动态图:



        经过上面的设置,接下来就开始批量发送邮件啦,具体演示如下所示:



        如果运气比较好的话,就能立刻收到发送的邮件。如果没有立刻收到也不要慌张,任务已经加入到Outlook任务列表,稍等一时就会成功发送了。如果Outlook未进行任何设置,会出现下图所示的警告:



        出现此警告框,是由于从外部调用Outlook发送邮件,为了安全,默认情况下会弹出该提示框,稍等几秒就可以点击允许继续发送邮件了。如果需要批量发送邮件,每次都弹出该对话框并等待几秒,那场景太难想象,所以可以通过以下方法进行设置,详见动态图:



        通过上图可以看出,如果编程访问里面的防病毒软件状态为无效,则需要通过设置编程访问安全性从不向我发出可疑活动警告(不推荐)。但如果电脑安装了防病毒软件,此时防病毒软件状态为有效,则不需设置也可以不弹出警告对话框哦。



        今天的介绍就到此结束啦,其实通过Outlook发送邮件也很方便,但必须先设置好Outlook邮箱,如果平时就使用该Outlook收发邮件,那就很方便了,可以批量为员工发送工资条等等。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多