程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> ASP技巧 >> 利用ASP+JMAIL進行郵件群發的新思路

利用ASP+JMAIL進行郵件群發的新思路

編輯:ASP技巧

背景:
Email地址存於MSSql一用戶信息表中,數量上萬。
公司自有服務器,集SMTP,POP3,WWW,FTP,MSSql,DNS等多種服務於一身。
jmail 有MailMerge對象,但是免費版不能用

要求:
用ASP+JMAIL,利用公司SMTP向所有用戶發送EMAIL

思路:
直接讀取數據庫,多次循環發送,會對本來配置不高的服務器造成很大壓力。
最好能對EMAIL分批發送,每批發送間隔一段時間,以此來緩解對服務器造成的壓力。

實現:
對EMAIL分批讀出記錄到recordset,利用常見的分頁程序,將所有記錄分頁,每頁作為一批,有多少頁就分多少批間隔延遲在每頁執行完畢後用<meta http-equiv="refresh" content="60;URL=SendMail.ASP?page="&page>來延遲跳轉減少執行時間:
在循環的過程中,循環添加收件人,而不要循環發送,即
for i=1 to rs.pagesize
msg.AddRecipIEnt rs("Email")
rs.movenext
next
msg.Send ("smtp.abc.com")
減小郵件大小循環添加收件人,會造成一封Email的收件人很多,這樣一封Email的就會很大。
所以,在以上代碼的基礎上改進一下,在循環內做個判斷,當收件人Email數量到達20的時候就發送一次。即:
for i=1 to rs.pagesize
msg.AddRecipIEnt rs("Email")
    if i mod 20 = 0 then                  '每 20 個收信人作為一封Email發送一次
      msg.Send ("smtp.abc.com")
      msg.ClearRecipIEnts                 '清除已發送的收信人
    end if
rs.movenext
next
msg.Send ("smtp.abc.com")                 '發送余下的
頁面
Mail.asp        包含郵件主題、正文的表單,<form action="SendMail.asp" target="Send">;一個iframe頁面,<iframe name="Send" src="SendMail.ASP">
SendMail.ASP    包含後台發送程序,循環,延遲跳轉等。

缺點:
發送過程中不能離開該頁面發送的時間較長,與設置的每批發送數量、網絡帶寬、SMTP服務器性能有關

改進:
可以在Mail.ASP中包含多個iframe頁面,每個頁面從不同的page開始發,相當於多線程發送,對smtp服務器壓力會增大,但能縮短發送時間。
可考慮在不同的page中采用不同的smtp服務器,例如包含多個iframe頁面,在偶數頁用smtp.abc.com,在奇數頁用smtp.123.com。這樣既減輕服務器壓力,也達到多線程發送縮短發送時間的目的。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved