Email地址存於MSSql一使用者資訊表中,數量上萬。
JMAIL 有MailMerge對象,但是免費版不能用

要求:
用ASP+JMAIL,利用公司SMTP向所有使用者送出EMAIL

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

實做:
對EMAIL分批
讀出記錄到recordset,利用常見的分頁程式,將所有記錄分頁,每頁作為一批,有多少頁就分多少批
間隔延遲
在每頁執行完畢後用 來延遲跳轉
減少執行時間:
在循環的過程中,循環新增收件人,而不要循環送出,即
for i=1 to rs.pagesize
msg.AddRecipient rs("Email")
rs.movenext
next
msg.Send ("smtp.abc.com")
減小信件大小
循環新增收件人,會造成一封Email的收件人很多,這樣一封Email的就會很大。
所以,在以上原始碼的基礎上改進一下,在循環內做個判斷,當收件人Email數量到達
20的時候就送出一次。即:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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。這樣既減輕伺服器壓力,也達到多線程送出
縮短髮送時間的目的。
arrow
arrow
    全站熱搜

    雞蛋貓異想世界 發表在 痞客邦 留言(2) 人氣()