使用ASP+JMAIL進(jìn)行郵件群發(fā)的新思路
發(fā)表時間:2023-08-17 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]背景: Email地址存于MSSql一用戶信息表中,數(shù)量上萬。 公司自有服務(wù)器,集SMTP,POP3,WWW,FTP,MSSql,DNS等多種服務(wù)于一身。 JMAIL 有MailMerge對象,但是...
背景:
Email地址存于MSSql一用戶信息表中,數(shù)量上萬。
公司自有服務(wù)器,集SMTP,POP3,WWW,FTP,MSSql,DNS等多種服務(wù)于一身。
JMAIL 有MailMerge對象,但是免費版不能用
要求:
用ASP+JMAIL,利用公司SMTP向所有用戶發(fā)送EMAIL
思路:
直接讀取數(shù)據(jù)庫,多次循環(huán)發(fā)送,會對本來配置不高的服務(wù)器造成很大壓力。
最好能對EMAIL分批發(fā)送,每批發(fā)送間隔一段時間,以此來緩解對服務(wù)器造成的壓力。
實現(xiàn):
對EMAIL分批
讀出記錄到recordset,利用常見的分頁程序,將所有記錄分頁,每頁作為一批,有多少頁就分多少批
間隔延遲
在每頁執(zhí)行完畢后用<meta http-equiv="refresh" content="60;URL=SendMail.asp?page="&page>來延遲跳轉(zhuǎn)
減少執(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的就會很大。
所以,在以上代碼的基礎(chǔ)上改進(jìn)一下,在循環(huán)內(nèi)做個判斷,當(dāng)收件人Email數(shù)量到達(dá)
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 包含郵件主題、正文的表單,<form action="SendMail.asp" target="Send">;一個iframe頁面,<iframe name="Send" src="SendMail.asp">
SendMail.asp 包含后臺發(fā)送程序,循環(huán),延遲跳轉(zhuǎn)等。
缺點:
發(fā)送過程中不能離開該頁面
發(fā)送的時間較長,與設(shè)置的每批發(fā)送數(shù)量、網(wǎng)絡(luò)帶寬、SMTP服務(wù)器性能有關(guān)
改進(jìn):
可以在Mail.asp中包含多個iframe頁面,每個頁面從不同的page開始發(fā),相當(dāng)于多線程發(fā)送,
對smtp服務(wù)器壓力會增大,但能縮短發(fā)送時間。
可考慮在不同的page中采用不同的smtp服務(wù)器,例如包含多個iframe頁面,在偶數(shù)頁用
smtp.abc.com,在奇數(shù)頁用smtp.123.com。這樣既減輕服務(wù)器壓力,也達(dá)到多線程發(fā)送
縮短發(fā)送時間的目的