背景:
email地址存于mssql一用戶信息表中,數(shù)量上萬。
公司自有服務器,集smtp,pop3,www,ftp,mssql,dns等多種服務于一身。
jmail 有mailmerge對象,但是免費版不能用
要求:
用asp+jmail,利用公司smtp向所有用戶發(fā)送email
思路:
直接讀取數(shù)據(jù)庫,多次循環(huán)發(fā)送,會對本來配置不高的服務器造成很大壓力。
最好能對email分批發(fā)送,每批發(fā)送間隔一段時間,以此來緩解對服務器造成的壓力。
實現(xiàn):
對email分批
讀出記錄到recordset,利用常見的分頁程序,將所有記錄分頁,每頁作為一批,有多少頁就分多少批
間隔延遲
在每頁執(zhí)行完畢后用來延遲跳轉
減少執(zhí)行時間:
在循環(huán)的過程中,循環(huán)添加收件人,而不要循環(huán)發(fā)送,即
for i=1 to rs.pagesize
msg.addrecipient rs("email")
rs.movenext
next
msg.send ("smtp.abc.com")
減小郵件大小
循環(huán)添加收件人,會造成一封email的收件人很多,這樣一封email的就會很大。
所以,在以上代碼的基礎上改進一下,在循環(huán)內做個判斷,當收件人email數(shù)量到達
20的時候就發(fā)送一次。即:
for i=1 to rs.pagesize
msg.addrecipient rs("email")
if i mod 20 = 0 then '每 20 個收信人作為一封email發(fā)送一次
msg.send ("smtp.abc.com")
msg.clearrecipients '清除已發(fā)送的收信人
end if
rs.movenext
next
msg.send ("smtp.abc.com") '發(fā)送余下的
頁面
mail.asp 包含郵件主題、正文的表單,