首頁 Home > 線上問答 Q & A > 技術分享 > 使用 CDO.Message 做郵件大量寄發
發表主題 回覆文章
 
PK
聯絡信箱 造訪網站

使用 CDO.Message 做郵件大量寄發


Views : 6226

相信大家也常常遇到要大量寄發電子報或 eDM 時,總是寄不完全,或是寄發失敗,因為一次寄發數百封至數千封的郵件,對一般主機來說,負荷是相當大的。

通常,一般市面上的虛擬主機廠商所提供的主機空間,都會做一定程度的郵件寄發流量限制。

所以,為了不在短時間內超過主機的流量限制,也確保程式的順利運作,
在這邊為大家介紹 將郵件分批寄送的處理方式 (以每次寄發 10 筆為例)。


首先在 ASP 網頁中,先加上下面三行,以確保程式正常運作:

On Error Resume Next '如果發生錯誤暫時略過
Response.Buffer = true '啟用緩衝
Server.ScriptTimeOut = 10000 '延長程式超時時間

在收件者的資料表中 (這裡可能是會員或訂戶),加上一個欄位 "sent",用來記錄此收件者是否已寄發。
在系統第一次讀取這個頁面時,就要使所有收件者的 sent 為 "N",做法如下:

 '將全部user設定為 "未寄發"
 Set rs = GetMdb("mydb/user.mdb","UPDATE users SET sent = 'N' ")
 '儲存一個紀錄,表示已經做過這個動作,下次讀取此頁面時,不要再做
 Session("isSet") = "yes"

在頁面中加上自動重新整理本頁的語法,讓此頁面可以不斷重複執行寄發動作,直到所有收件者都已寄發為止。

< meta http-equiv = "refresh" content = "10" >

接下來,讀取全部收件者的資料,開始做寄發動作:

 '讀取全部 sent 為 N 的收件者
 Set rs = GetMdb("mydb/user.mdb","SELECT * FROM users WHERE sent = 'N' ")

'建立 CDO.Message 線上郵寄物件
myMailServer = "msa.hinet.net"
 sch = "
http://schemas.microsoft.com/cdo/configuration/"
 Set cdoConfig = Server.Createobject("CDO.Configuration")
 cdoConfig.Fields.Item(sch & "sendusing") = 2
 cdoConfig.Fields.Item(sch & "smtpserver") = myMailServer
 cdoConfig.fields.update
 Set cdoMessage = Server.Createobject("CDO.Message")
 Set cdoMessage.Configuration = cdoConfig
 
'使用迴圈執行大量寄發 (每次 10 筆)
For i = 1 To 10

 cdoMessage.From = "寄件人"
 cdoMessage.To = "收件人"
 cdoMessage.Subject = "eDM標題"
 cdoMessage.HTMLBody = "eDM內容"
 cdoMessage.Send
  
  If Err Then
   Response.Write "寄送失敗 - " & Err.Description 
  End If

  '將 sent 更新為已寄發
  rs("sent") = "Y"
  rs.Update

   urs.MoveNext
   If rs.EOF Then Exit For
 Next

 Set cdoMessage = Nothing
 Set cdoConfig = Nothing


以上,可以避免因為收件者過多而造成系統逾時的問題,改成小量多批寄發的方式。
如果有其他意見或補充,歡迎共同參予討論,並請不吝賜教 ^_^

6/8/2009 10:09:54 AM

小忠
RE: 使用 CDO.Message 做郵件大量寄發

感謝貴公司!

小弟剛好也有這問題..當名單超過300人就開始收不到信了!!

回覆 1.    6/29/2009 9:03:48 AM

回到上方