现在的位置:首页>操作系统>正文

Excel VBA群发邮件:64位系统上利用Jmail实现邮件群发

2015年02月01日 ⁄ 共 2918字 暂无评论

这次我们来讲一下利用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等免费邮箱来实现短时间内发大量邮件那你还是免了吧,发不了几封就会被邮箱给限制了,而企业邮箱就不会有这些限制,才可能实现真正意义上的群发。

小结

文章来源自战战如疯,由免费部落整理发布.

VBA来操作这样的群发邮件,速度上还是很快的.

给我留言