查看: 3916|回复: 6

[求代码] 求jmail发邮件群发代码 。。。

[复制链接]
二人天 发表于 2015-3-6 09:24:53 | 显示全部楼层 |阅读模式
本帖最后由 二人天 于 2015-3-6 09:27 编辑

以下这段代码理论上能够实现从现有数据库中读出邮箱然后循环发送,这样会导致循环一次登录一次邮件服务器中间会有很多用户收不到信件,还有没法有别的群发的方式 。。。 在我自己办公室网速较快测试没有问题,到客户办公室就出现某些用户收不到信件的情况。


  <%

  

  
qxtsj=cstr(date())

gsmc=trim(rs2("cname"))

gsxx=trim(rs2("cemail"))

gsid=trim(rs2("id"))

varxmid=cstr(varuser)




Set jmail = Server.CreateObject("JMAIL.Message") '建立发送邮件的对象
jmail.silent = true '屏蔽例外错误,返回FALSE跟TRUE两值j
jmail.logging = true '启用邮件日志
jmail.Charset = "GB2312" '邮件的文字编码为国标
jmail.ContentType = "text/html" '邮件的格式为HTML格式
jmail.AddRecipient gsxx '邮件收件人的地址
jmail.From = "pszx3976@163.com" '发件人的E-MAIL地址
jmail.MailServerUserName = "pszx3976" '登录邮件服务器所需的用户名
jmail.MailServerPassword = "6633967" '登录邮件服务器所需的密码
jmail.Subject = "造价咨询抽签" '邮件的标题
jmail.Body = varsubject '邮件的内容
jmail.Priority = 1 '邮件的紧急程序,1 为最快,5 为最慢, 3 为默认值
'jmail.Send("smtp.sina.com") '执行邮件发送(通过邮件服务器地址)
if jmail.send("smtp.163.com") then
response.write "<br/>"
response.write rs2("cname")&"邮件已发送;"
else
response.write "<br/>"
response.write rs2("cname")&"邮件发送失败;"
end if
jmail.Close() '关闭对象


'未中签发送邮件



strsql3 = "select * from zf_comp where id<>"+varxzdw

set rs3=server.createobject("adodb.recordset")

rs3.open strsql3,conn,1,1

rs3.movefirst
do until rs3.eof
         
gsxx1=trim(rs3("cemail"))


Set jmail = Server.CreateObject("JMAIL.Message") '建立发送邮件的对象
jmail.silent = true '屏蔽例外错误,返回FALSE跟TRUE两值j
jmail.logging = true '启用邮件日志
jmail.Charset = "GB2312" '邮件的文字编码为国标
jmail.ContentType = "text/html" '邮件的格式为HTML格式
jmail.AddRecipient gsxx1 '邮件收件人的地址
jmail.From = "pszx3976@163.com" '发件人的E-MAIL地址
jmail.MailServerUserName = "pszx3976" '登录邮件服务器所需的用户名
jmail.MailServerPassword = "6633967" '登录邮件服务器所需的密码
jmail.Subject = "造价咨询抽签" '邮件的标题
jmail.Body = varsubject1 '邮件的内容
jmail.Priority = 3 '邮件的紧急程序,1 为最快,5 为最慢, 3 为默认值
'jmail.Send("smtp.sina.com") '执行邮件发送(通过邮件服务器地址)
if jmail.send("smtp.163.com") then
response.write "<br/>"
response.write rs3("cname")&"邮件已发送;"
else
response.write "<br/>"
response.write rs3("cname")&"邮件发送失败;"
end if
jmail.Close()


rs3.movenext
loop
rs3.close


'项目信息增加

strsql3 = "UPDATE zf_proj SET pcomp = '"+gsmc+"',pemail='"+gsxx+"',pdate1='"+qxtsj+"',pid="+gsid+" WHERE id = "+varxmid

conn.Execute(strsql3)

conn.close

%>
ttasp 发表于 2015-3-6 09:36:50 | 显示全部楼层
以下这段代码理论上能够实现从现有数据库中读出邮箱然后循环发送,这样会导致循环一次登录一次邮件服务器中 ...
二人天 发表于 2015-3-6 09:24


你的循环系统开销很大,一般空间商都会有资源限制,肯定出问题。正确的解决思路是这样:
jmail.AddRecipient gsxx1 '邮件收件人的地址


在这个地方,你用数组分割增加多个收件人地址就行了。

StrEmail = split("aa@aa.com;bb@bb.net;cc@cc.com", ";")

for i=0 to UBound(StrEmail)

  JMail.AddRecipient Trim(StrEmail(i))

next
 楼主| 二人天 发表于 2015-3-6 17:19:33 | 显示全部楼层
本帖最后由 二人天 于 2015-3-6 17:23 编辑

StrEmail = split("aa@aa.com;bb@bb.net;cc@cc.com", ";")
这个数组的内容是从数据库中读出的信箱字段的筛选后的所有内容

strsql3 = "select * from zf_comp where id<>"+varxzdw

set rs3=server.createobject("adodb.recordset")

rs3.open strsql3,conn,1,1

用哪个函数?语句怎么写?
ttasp 发表于 2015-3-6 22:12:51 | 显示全部楼层
StrEmail = split("aa@aa.com;;", ";")
这个数组的内容是从数据库中读出的信箱字段的筛选后的所有内容

...
二人天 发表于 2015-3-6 17:19



你先把所有的邮箱拼凑成这样的字符串:aa@aa.com;bb@bb.net;cc@cc.com
 楼主| 二人天 发表于 2015-3-9 17:24:49 | 显示全部楼层
回复 4# ttasp

经测试发现Jmail添加收件人地址不需要考虑格式的问题。最后这样改了一下,没用数组。
do until rs3.eofjmail.AddRecipient trim(rs3("cemail")) '邮件收件人的地址
rs3.movenext
loop
ttasp 发表于 2015-3-9 18:10:49 | 显示全部楼层
回复  ttasp

经测试发现Jmail添加收件人地址不需要考虑格式的问题。最后这样改了一下,没用数组。
do ...
二人天 发表于 2015-3-9 17:24


道理是一样的,就是一次添加多个收件人
   而不用循环创建组件发送
 楼主| 二人天 发表于 2015-3-13 10:25:27 | 显示全部楼层
回复 6# ttasp


   呵呵。。谢谢了。功能完成。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

在线客服

售前咨询
售后咨询
服务热线
023-58418553
微信公众号