前一期为大家介绍了如何使用VBA结合Outlook批量发送邮件,需要批量为不同的人发送不同的附件等,可以很方便的批量发送。但缺点是需要事先配置Outlook邮箱。那有没有不需要配置Outlook即可批量发送邮件呢?答案是肯定的,那究竟什么是CDO?如何使用CDO批量发送邮件呢?接下来就一一为大家揭晓。

CDO(Collaboration Data Objects):协作数据对象,从Exchange Server 2007和Outlook 2007开始,CDO 1.2.1作为不在产品安装的一部分。CDO 1.2.1是通过基于COM的API提供对Outlook兼容对象的访问的包。

既然知道了什么是CDO,那究竟如何在Excel中使用CDO并批量发送邮件呢?

使用CDO必须提供一个邮箱服务,可以使用QQ或163等,下面介绍如何开通QQ的邮箱服务。

1 登录QQ邮箱,进到主界面;

2 点击上图红色框中的【设置】,进入邮箱设置界面;

3 点击上图红色框中的【账户】,进入账户设置界面并找到【POP3/IMAP/SMTP...】等服务;

4 可以看到上图中有个小的红色框,我们需要开启相应的服务,便于发送邮件,可以只开启第一个POP3/SMTP服务。点击开启会弹出如下对话框,让我升级为16位授权码进行登录,请见下图:

5 点击上图中的立即升级,会让我们用指定的手机号发送短信到1069070069,如下图所示:

6 成功发送短信后,点击上图中的【我已发送】,会提示验证成功,然后生成授权码,如下图所示:

PS:请不要随意关闭和开启以上的服务,因为每发送一条短信,运营商会收取0.1元,每开启一项服务,就需要发送一条短信,所以安全是要付出代价的。

7 可以看到上图下面的提示:可以拥有多个授权码,所以无需记住该授权码并且不要告诉他人。这里我们需要记住该授权码,因为需要在Excel中使用。成功开启POP3/SMTP服务后,会发现状态变为已开启,如下图所示:

通过上面几个步骤的设置,准备工作就已经完成了,加下来就是批量发送邮件的核心代码函数(请注意代码中红色字体):

'使用CDO发送邮件Public Function fSendEMailCDO(strTo As String, strSubject As String, strBody As String, Optional strAttachment As String = "", Optional strCC As String = "", Optional strBCC As String = "") As Object

Dim CDOMail As Variant

Dim strUser, strPwd As String

On Error Resume Next '出错后继续执行 Application.DisplayAlerts = False '禁用系统提示

strUser = "您的QQ号@qq.com" '请填写您的邮箱地址 strPwd = "授权码" '填写我们上面申请开通的授权码 If strTo = "" Then MsgBox "请输入收件人地址~"

If strSubject = "" Then MsgBox "请输入主题~"

If strBody = "" Then MsgBox "请输入正文内容~"

Set CDOMail = CreateObject("CDO.Message") '创建对象 CDOMail.From = strUser '设置发信人的邮箱

CDOMail.To = strTo '设置收信人的邮箱 If ChkEmail(strCC) = 0 Then

CDOMail.CC = strCC '设置抄送的邮箱 End If

If ChkEmail(strBCC) = 0 Then

CDOMail.BCC = strBCC '设置密送的邮箱 End If

CDOMail.Subject = strSubject '设定邮件的主题

If strBody Like "*html*" Then

CDOMail.HTMLBody = strBody '使用Html格式发送邮件 Else

CDOMail.TextBody = strBody '使用文本格式发送邮件 End If

Dim strArray

strArray = Split(strAttachment, "|")

For i = 0 To UBound(strArray)

CDOMail.AddAttachment ThisWorkbook.Path & "\" & strArray(i) '如果有多个附件,分别添加 Next

SUTl = "http://schemas.microsoft.com/cdo/configuration/" '微软服务器网址

With CDOMail.Configuration.Fields

.Item(SUTl & "smtpserver") = "smtp.qq.com" 'SMTP服务器地址 .Item(SUTl & "smtpserverport") = 465 'SMTP服务器端口 .Item(SUTl & "sendusing") = 2 '发送端口 .Item(SUTl & "smtpauthenticate") = 1 '远程服务器需要验证 .Item(SUTl & "smtpusessl") = 1 'SSL .Item(SUTl & "sendusername") = strUser '发送方邮箱名称 .Item(SUTl & "sendpassword") = strPwd '发送方邮箱密码 .Item(SUTl & "smtpconnectiontimeout") = 60 '连接超时(秒) .Update

End With

CDOMail.Send '执行发送 Set CDOMail = Nothing '发送成功后即时释放对象

Application.DisplayAlerts = True '恢复系统提示 Set fSendEMailCDO = Err '邮件发送情况End Function

如上的代码中都进行的详细的注释,也用到了前一期使用的检查邮件是否合规的ChkEmail函数。需要发送的邮件信息如下图所示:

为了能够调用fSendEMailCDO函数,我写了一个宏,用来循环调用该函数。宏代码如下:

Sub 发送邮件()

Dim errMsg As Object

Dim iCount As Integer, iTotal As Integer

Worksheets("Sheet1").Select

Range("A2").Select

iCount = 0

iTotal = 0

Do While ActiveCell.Value <> ""

Set errMsg = fSendEMailCDO(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 errMsg.Number = 0 Then

iCount = iCount + 1

End If

iTotal = iTotal + 1

ActiveCell.Offset(1, 0).Select

Loop

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

End Sub

把上面2个自定义函数(fSendEMailCDO和ChkEmail)和宏(发送邮件)放入同一个模块中,然后在工作表中增加一个按钮即可批量发送邮件了,请看如下演示:

今天的介绍就到此结束了,如果让我来选,我首选使用CDO进行批量邮件发送,因为方便快捷,也不需要借助于Outlook进行发送。而且发送邮箱的速度明显要比Outlook要快捷。

原创不易,每一个案例都是自己整理和自学而来。曾有多少次明明已经坚持不下去,想放弃了的时候,却还是因为舍不得。希望各位看官多多转发和点赞。给别人一点正能量的同时,也是给予自己正能量。Written by Steven in 20170425^_^

微信公众号:SaveUTime

SUT学习交流群:615356012,入群审核人:Steven

关注公众号,提高效率,节约您的时间!

cdo收取邮件_【Excel VBA】- 使用CDO批量发送邮件(二)相关推荐

  1. cdo收取邮件_使用Net.Mail、CDO组件、JMail组件三种方式发送邮件

    一.使用Net.Mail 需要服务器认证,大部分服务器端口为25. View Code 1 /// 2 ///用MailMessage通过需要认证的SMTP服务器发送邮件,可以发送附件3 /// 4 ...

  2. cdo收取邮件_使用cdo组件发送邮件

    服务的大大小小的网站都有他们自己的邮件服务器,但并非每个都那么慷慨地免费提供给我们的这个小程序使用,Yahoo!不可以,但163的可以,也就是说,为了完成我们这个程序,你应该注册一个163邮件或找到其 ...

  3. cdo收取邮件_利用CDO发邮件 报错怎么处理

    import win.ui; import com; //引用com库 /*DSG{{*/ mainForm = win.form(text="aardio工程11";right= ...

  4. cdo收取邮件_使用CDO发送电子邮件

    使用CDO发送电子邮件 CDO是Collaboration Data Objects的简称,它是一组高层的COM对象集合,并经历了好几个版本的演化,现在在Windows2000和Exchange200 ...

  5. cdo收取邮件_利用CDO实现邮件回执功能

    http://blog.csdn.net/irvine007/archive/2006/02/22/606117.aspx 引用CDO组件,SYSTEM32下的CDOSYS.DLL,增加一个包装器 u ...

  6. cdo收取邮件_使用 CDO 发送测试电子邮件消息

    此脚本使用 CDO 发送测试电子邮件消息. Visual Basic Set objEmail = CreateObject("CDO.Message") set objConf ...

  7. excel vba 实现sheet批量输出pdf

    业务需求 由于需要对excel 多个sheet实现自动化逐个输出pdf, 这里使用excel vba进行实现 EXCEL VBA代码 Sub 宏4()Dim sht As WorksheetDim F ...

  8. 让自己开发的VBA应用能够批量发送邮件(可带多个附件)

    当我们开发了一个VBA应用,很多时候需要让它能够自动批量发送邮件.这时候,我们就需要使用到CDO了.CDO全称Collaboration Data Objects,即协作数据对象,是Office 软件 ...

  9. 如何从Excel表格导入数据批量生成二维码

    目前二维码应用渐趋广泛,二维码具有储存量大.保密性高.追踪性高.抗损性强.备援性大.成本便宜等特性,这些特性特别适用于表单.安全保密.追踪.证照.存货盘点.资料备援等方面.那么我们怎么用条码打印软件从 ...

最新文章

  1. (每日一题)P3723 [AH2017/HNOI2017]礼物(经典FFT)
  2. 4位华人博士荣获2022苹果奖学金!其中1名浙大在读博士
  3. 架构周报:微信后台系统的演进之路
  4. “众所周知,视频不能P”,GAN:是吗?
  5. VTK:Math之VectorNorm
  6. 硬件:RS485基础知识笔记
  7. 一段三次分拆的蚂蚁搬家式MySQL迁移经历
  8. VSCode 用户自定义片段 snippet 基本语法说明
  9. dj鲜生-30-退出用户的登陆
  10. Spring整合Quartz实现定时任务
  11. 支付宝首页新增商家服务进度卡片 目前正在灰度测试中
  12. EntytyFramework批量更新
  13. UITableView的tableHeaderView和viewForHeaderInSection區別
  14. .NET CF获取当前dll及其调用程序的文件名和完全路径
  15. 同济版《线性代数》再遭口诛笔伐,网友:它真的不太行...
  16. python发送以太网报文_python之分解以太帧
  17. 如何安装 Simscape Multibody Link
  18. php 写入exif,用PHP将EXIF写入JPG
  19. 策略模式——鸭子游戏
  20. 不用CorelDraw怎么编辑CDR文件

热门文章

  1. 使用NetFlow分析互联网网络异常流量
  2. oracle万能分页代码,oracle高效分页存储过程代码
  3. 2018数学建模往年试题汇总
  4. 中职计算机组装与维护课程标准,《计算机组装与维护》课程标准-20210412161624.pdf-原创力文档...
  5. How to achieve low latency with the 10Gbps Ethernet
  6. spring架构生成二维码
  7. C语言蓝色内条不显示了,A320题库-指示记录
  8. P1578 奶牛浴场
  9. 手机访问本地开发网页
  10. F28335的SCI通讯模块