3 个回答
很多时候,我们会遇到这种需要针对不同主体发送不同内容的场景。一般情况下,我们会一个个的逐一去发,但是,如果你需要发送的内容以及附件达到上百个或者更多的时候,再这样手工去发送就太困难了。
实际上,有更好的办法,那就是使用程序自动批量发送。理论上,任何程序语言都可以做到,在此,先不考虑其它高级语言的实现办法,我还是使用最简单的VBA来做。
1、制作邮件内容列表
在此,需要把邮件里面的主要内容,收件人名称、收件人邮箱、邮件主题、邮件正文、邮件附件路径全部放到列表里面,具体如下图:
2、编写执行发送邮件的VBA代码
以下是执行发送邮件的核心代码部分。在此,使用到了微软CDO对象。此部分代码可以适用大部分的邮箱发送,只要修改使用邮箱的相关配置参数即可。在此,我使用的是126的邮箱发送,相关配置参数也是126的。以下代码中已做了详细的注释。
3、发送效果
以下是执行后的具体效果。
4、总结
以上,仅仅做了单次发送的一个案例。如果需要针对大批量的发送,那么只要循环数据列表即可,也就是把发送邮件的主代码写入数据列表循环体内即可。这部分就由诸位自行研究修改,出于对各位的负责,还是不打算全部一次性写完,得给各位朋友留出自行学习的空间。
二次更新:
应很多网友的要求,照着图片输入代码太麻烦,需要源码。在此就将文中使用到的代码发出来,但邮箱设置部分需要改成自己的。
Sub SendEmail()
Dim CDO As Object
Dim CDO_toname, CDO_to, CDO_subject, CDO_textbody, CDO_htmlbody, CDO_attachment As String
Const Email_From = "XXXXXX" '发件人邮箱
Const Password = "XXXXXXX" '发件人邮箱密码
Const schema = "http://schemas.microsoft.com/cdo/configuration/" '微软CDO服务器网址
CDO_toname = Sheet1.Range("B2")
CDO_to = Sheet1.Range("C2")
CDO_subject = Sheet1.Range("D2")
CDO_textbody = Sheet1.Range("E2")
CDO_attachment = Sheet1.Range("F2")
CDO_htmlbody = "<html><body><B>尊敬的" & CDO_toname & ":</B>" & _
"<br>  " & CDO_textbody & "</body></html>" '设置邮件正文的HTML格式
Set CDO = CreateObject("CDO.Message") '创建CDO.Message对象
CDO.From = Email_From '发件人地址
CDO.To = CDO_to '收件人地址
CDO.SubJect = CDO_subject '邮件主题
CDO.htmlBody = CDO_htmlbody 'HTML格式的邮件正文,如果纯文本无格式的,则使用CDO.textbody属性
CDO.AddAttachment Trim(CDO_attachment) '邮件附件文件路径
With CDO.Configuration.Fields '批量设置CDO对象属性
.Item(schema & "sendusing") = 2 '使用网络上的SMTP服务器而不是本地的SMTP服务器
.Item(schema & "smtpserver") = "smtp.126.com" 'SMTP服务器地址,在此以126为例
.Item(schema & "smtpauthenticate") = 1 '服务器认证方式
.Item(schema & "sendusername") = Email_From '发件人邮箱
.Item(schema & "sendpassword") = Password '发件人邮箱密码
.Item(schema & "smtpserverport") = 465 'SMTP服务器端口
.Item(schema & "smtpusessl") = True '是否使用SSL
.Item(schema & "smtpconnectiontimeout") = 60 '连接服务器的超时时间
.Update '更新设置