楼主,您好!
先说说我的个人经验吧。
用VBA发送电子邮件,常用的方法有两种:一是VBA调用OutLook发送,二是VBA直接发送。
而我平常用的就是后者——VBA直接发送,我的想法很简单,VBA自己能搞定的事,为何还要麻烦OutLook呢?
通过VBA调用CDO.Message,可以直接利用21cn、163、QQ……等邮件服务器来发送邮件,
邮件可以抄送,也可以密送,可以是纯文本格式,也可以是HTML格式,还可以发送附件,
可以这么说,基本的邮件功能都可以实现,而且只需几行代码,实现起来又快又方便,所以我是挺推荐这种方法的。
以下我提供一段现成的代码,上面有详细的备注说明,楼主您可以参考一下。
- Sub Test()
- Dim mURL$
- mURL = "http://schemas.microsoft.com/cdo/configuration/" '微软服务器网址
- On Error Resume Next
- With CreateObject("CDO.Message") '调用CDO
- With .Configuration.Fields
- .Item(mURL & "sendusername") = "abcde" '发送邮箱账号(账号或邮箱全称均可)
- .Item(mURL & "sendpassword") = "********" '发送邮箱密码(对于有授权码制度的邮局用授权码,对于没有授权码制度的邮局用邮箱密码)
- .Item(mURL & "smtpserver") = "smtp.21cn.com" 'SMTP服务器地址
- .Item(mURL & "smtpserverport") = 25 'SMTP服务器端口(使用SSL加密的,SMTP端口号为25或465;不使用SSL加密的,SMTP端口号为25)
- .Item(mURL & "smtpauthenticate") = 1 '服务器认证方式(1为需要提供用户名和密码,0为不提供)
- .Item(mURL & "smtpusessl") = True '是否使用SSL加密
- .Item(mURL & "sendusing") = 2 'SMTP服务器位置(1为本地,2为网络)
- .Item(mURL & "smtpconnectiontimeout") = 60 '连接超时(秒)
- .Update '更新设置
- End With
- .From = "abcde@21cn.com" '发件人邮箱
- .To = "12345@qq.com" '收件人邮箱
- '.CC = MailCc '抄送
- '.Bcc = MailBcc '密送
- .Subject = "21cn发出" '邮件主题
- .TextBody = "邮件测试" '纯文本的邮件内容
- '.HTMLBody = "正在邮件测试" 'HTML格式的邮件内容
- '.AddAttachment "C:\Windows\1MB.txt" '添加附件(附件的路径)
- .send '执行发送
- End With
- End Sub
复制代码重要说明:
1、上面代码中的账号和密码是假的,要测试的话,必须填定已申请好的账号和密码(或授权码);
2、VBA调用COM组件CDO来发送邮件,先要进行引用,具体操作为:工具→引用→勾选“Microsoft CDO for Windows 2000 Library”
3、邮箱必须开通SMTP功能;
4、对于21cn邮箱,由于没有“授权码”制度,VBA代码中的“密码”应设置为“邮箱的登录密码”;
5、对于网易、腾讯等邮箱,由于有“授权码”制度,VBA代码中的“密码”应设置为“授权码”;
6、温馨提醒(个人真实经历):一开始为了调试代码,一般用的是自己的邮箱来接收邮件,只有这样才知道发送的结果。但随着代码的频繁测试,邮件不断地发送,接收的邮箱很可能将其列入黑名单而拒收邮件。要解决该问题,可以参考一下邮箱设置中的白名单功能。