Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 890|回复: 1

[已解决]利用VBA自动发送邮件

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

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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-5 19:11 , Processed in 0.219166 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表