我有一個asp.net程序,我需要發送大量的電子郵件。 當我打電話http://localhost:70/sendemails 系統將在分開的線程中逐一發送電子郵件(就像異步)。 我不知道這是否是最好的方法。 但我想知道的是:我計劃發送10000封電子郵件,並在我打電話給鏈接,然後關閉瀏覽器(意味着會話將被關閉), 然後,如果我創建的線程也將被終止?asp.net中的線程何時終止?
什麼是發送大量電子郵件的最佳方法?
我有一個asp.net程序,我需要發送大量的電子郵件。 當我打電話http://localhost:70/sendemails 系統將在分開的線程中逐一發送電子郵件(就像異步)。 我不知道這是否是最好的方法。 但我想知道的是:我計劃發送10000封電子郵件,並在我打電話給鏈接,然後關閉瀏覽器(意味着會話將被關閉), 然後,如果我創建的線程也將被終止?asp.net中的線程何時終止?
什麼是發送大量電子郵件的最佳方法?
我建議ASP.NET應用程序將信息寫入某個描述的隊列中 - 無論是消息隊列還是數據庫中的表。
然後有一個單獨的服務運行來處理隊列併發送電子郵件。這樣,在回覆之前,您無需等到電子郵件地址爲發送,但仍然可以確定在頁面響應時,請求已被保留。
另一種方法是啓動一個新線程在ASP.NET應用程序中發送電子郵件,但這意味着如果應用程序崩潰(或被回收),請求將會丟失。將持久性和容錯性放在單獨的服務IMO中更容易。
線程不應該被關閉瀏覽器終止。什麼可以終止線程將是應用程序的回收(如果內存增長過多或出現其他特定條件)。
發送郵件的最佳方法是有一個單獨的windows服務,但如果這是不可能的,那麼使用線程可能是一個可行的想法,假設您有一種機制來重新啓動應用程序回收線程並重新啓動從它離開的地方發送。重新啓動的問題是,您需要向頁面發出請求才能恢復線程 - 例如,您可以使用計劃任務控制的計算機執行此操作。可以工作,但與Windows服務相比不是很可靠。
Yeap-像MSMQ一樣會做。 – RichardOD 2009-10-05 08:45:15