2010-02-06 96 views
0

有幾個類似的問題。我只想澄清一部分。如何從網絡應用發送電子郵件

如果我想發送一封電子郵件(最多30個)來回應用戶的操作,我會從中執行什麼執行上下文?

  1. 我是否會進行同步呼叫(郵件服務器位於同一個數據中心,因此實際發送速度很快)?

  2. 我生成一個線程並從那裏發送它?這樣每個用戶請求發送的郵件都會被一個新線程處理?

  3. 我有一個處理電子郵件隊列的後臺線程嗎?

我認爲最大的問題是它是一個共享的虛擬主機。所以我不知道安裝/啓動Windows服務或啓動專用線程的好方法。

詳細信息:ASP.NET MVC應用程序,託管在IIS 7.0集成模式下,在discountasp.net上使用discauntasp.net smtp服務器。

有沒有更好的方法?什麼是「標準」方式來實現這一點?

回答

1

大多數數據中心有一個smtp地址,他們可以爲您提供發送郵件。我只是創建郵件對象並將其發送到本地smtp服務器。如果你沒有訪問權限,那麼你可以讓你的smtp適配器連接到一個外部服務,並提供它的認證信息,讓你通過它發送郵件。非本地地址通常需要這個。

如果你不得不發送大量郵件或者你的服務器負載很高,我建議你或者產生一個不同的線程,或者如果你有權訪問你添加到一個可以接受的服務的盒子項目並將它們從您的Web應用程序中分離出來。這是因爲您的Web應用程序中的線程可能會被回收或死亡,如果最終結束了長時間運行的進程,這可能意味着數據丟失或功能喪失。通過建立隊列,您可以爲用戶提供快速功能,而不會影響QoS。

如果您建議這是一個共享框,那麼您將希望產生一個新線程爲您執行此操作。反應式擴展可以爲您提供更強大的方式來執行此操作,並且是TPL(任務並行庫)的一部分。讓我知道你是否需要更具體的例子。

1

共享主機與否,您的主題將只能使用分配給您的資源。如果你只是一次打出30個隊列,那麼你可能想要使用一個隊列,因爲在這種情況下分離30個線程對我來說似乎有點愚蠢。這可能需要更多的處理時間來創建線程並關閉它們,而不是發送一封電子郵件到郵件服務器。 (半開玩笑)

+0

他可以在一個線程中排隊所有30封電子郵件,這將會很好。 – Middletone 2010-02-06 19:28:35

相關問題