除非注明,文章均为 战战如疯 原创,转载请保留链接: http://www./cat4/129.html,VBA交流群273624828。
这次我们来讲一下利用Excel VBA群发邮件的例子,其实用价值就不用我再次强调了。Jmail是一个专门用来发邮件的组件,我们不必知道它怎么来的,只要会用就好。Jmail在32位系统和64位系统上都可以使用,只不过两者注册的方法不同,其它是完全一样的。这里之所以强调64位是因为大多数人只会在32位上注册,网上一些解决64位上注册的方法都有些烦琐。先说32位系统上注册,将本节示例文件中的Jmail.dll文件放到"C:\windows\system32\"下,然后在窗口右下角的windows键的搜索框里输入"regsvr32 jmail.dll"回车即可,提示注册成功。在64位上注册其实只有一点不同,需要将Jmail.dll放入"C:\Windows\SysWOW64\"文件夹下,在搜索框里输入"regsvr32 C:\Windows\SysWOW64\jmail.dll"回车,提示注册成功即可。
在使用Jmail的时候需要先开启邮箱的smtp服务,各种邮箱开启的方式大同小异,163邮箱是默认开启的不需设置,其它邮箱在设置中找到POP3/IMAP/SMTP服务,将POP3/SMTP和IMAP/SMTP勾选就可以了,大多数的企业邮箱也是默认开启的。
下面我们来看一个单独发一封邮件的代码来学习怎么利用Jmail来发邮件
Sub SendMail() Dim jmail, t Set jmail = CreateObject("JMAIL.Message") '建立发送邮件的对象 jmail.silent = False '屏蔽例外错误,返回FALSE跟TRUE两值j jmail.logging = True '启用邮件日志 jmail.Charset = "GB2312" '邮件的文字编码为国标 jmail.AddAttachment "D:/附件.txt" '附件地址 'jmail.ContentType = "text/plain" '正文格式为字符串,可省略 jmail.ContentType = "text/html" '正文的格式为HTML格式 jmail.AddRecipient "12345678@qq.com" '邮件收件人的地址 jmail.From = "*****@163.com" '发件人的E-MAIL地址 jmail.MailServerUserName = "*****@163.com" '登录邮件服务器所需的用户名 jmail.MailServerPassword = "*****" '登录邮件服务器所需的密码 jmail.Subject = "Mail Subject" '邮件的标题 'jmail.Body="这是正文" '字符串格式的正文 jmail.HtmlBody = "Html格式的正文" '邮件的内容 jmail.Priority = 1 '邮件的紧急程序,1 为最快,5 为最慢, 3 为默认值 jmail.Send ("smtp.163.com") '执行邮件发送(通过邮件服务器地址) If Err.Number <> 0 Then MsgBox "发送失败", vbOKOnly + vbInformation, "提示" Else MsgBox "发送成功", vbOKOnly + vbInformation, "提示" End If jmail.Close '关闭对象 Set jmail = Nothing End Sub
上面的代码是利用163邮箱来发单封邮件,里面的参数都已经加了注释,在使用时需要修改的地方包括附件地址、发件人邮箱、发件人邮箱密码,收件人邮箱地址、标题、正文和邮件服务器地址。在这里解释下邮件服务器地址怎么得到,最快的方法那就是百度,例如你想知道163邮箱的邮件服务器地址,只要百度中搜索”163邮箱smtp服务器"即可,其他邮箱也可如此,当然如果你要想知道smtp是什么东西那你更要去问度娘了。
在这里正文格式的含义,我们知道平时朋友之间发邮件的时候一般不会对邮件正文进行排版,正文只要是一些简单的字符串就可以了,但是如果是以正式的名义发的邮件,比如公司推送给自己客户的广告则正文就会进行正式的排版,邮件正文相当于一个单独的html网页了。在Jmail中,ContentType属性和正文属性Body或HtmlBody是结合使用的,如果ContentType属性是"text/plain",则表示正文是字条串格式,那么正文就应该是jmail.Body = "正文字符串",如果ContentType属性是“text/html”,则表示正文是html网页格式,那么正文参数就应该是jmail.HtmlBody="相应的html代码"。
下面我们来看一个完整的群发邮件的代码
Sub SendMail() Dim jmail, t, i Set jmail = CreateObject("JMAIL.Message") Range("E2:E" & Range("E65536").End(xlUp).Row).ClearContents '清除前一次的发送状态 For i = 2 To Range("A65536").End(xlUp).Row jmail.silent = False jmail.logging = True jmail.Charset = "GB2312" jmail.AddAttachment Range("D" & i) jmail.ContentType = "text/plain" 'jmail.ContentType = "text/html" jmail.AddRecipient Range("C" & i) '邮件收件人的地址 jmail.From = "******@163.com" '这里改成你自己的邮箱 jmail.MailServerUserName = "******@163.com" '这里也填上自己的邮箱 jmail.MailServerPassword = "******" '这里填写自己邮箱的密码 jmail.Subject = "这里填写邮件标题" jmail.Body = "这里填写邮件正文" 'jmail.HtmlBody = "Html格式的正文" jmail.Priority = 3 On Error Resume Next jmail.Send ("smtp.163.com") If Err.Number <> 0 Then Range("E" & i) = "失败" Else Range("E" & i) = "成功" End If Next jmail.Close '关闭对象 Set jmail = Nothing End Sub
上面的代码中将收件人地址、附件等放在了相应的Excel单元格中,这样只需要循环读取单元格内容就可以实现邮件的群发了,使用的时候只需要把相应的参数改一下就可以了。附件那栏路径要正确,如果不发送附件要将jmail.AddAttachment Range("D" & i)这句删除,否则会报找不到文件的错误。
需要补充说明的是,免费邮箱都会对发邮件的频率和数量有所限制,所以你如果想利用163、QQ等免费邮箱来实现短时间内发大量邮件那你还是免了吧,发不了几封就会被邮箱给限制了,而企业邮箱就不会有这些限制,才可能实现真正意义上的群发。
本节示例文件下载地址http://pan.baidu.com/s/1i343Q0P。
|