2011-07-06 236 views
1

我們有一些需要發送電子郵件的應用程序。但是現在,我們辯論發送它們的正確方式。我們的應用程序實現了N層體系結構。在一個過程中,表示層調用業務邏輯層的發佈方法。發佈成功後,需要通過電子郵件通知許多用戶。Asp.net電子郵件發送程序

在這一點上,我們辯論知道,如果這是業務邏輯層完成這項工作或表示層的責任。如果業務層需要發送電子郵件,那麼他的工作就是構建電子郵件模板或表示層的工作。邏輯層只是一個類庫,它不能調用某種類型的asp.net頁面來提取html。一些電子郵件模板內容是動態的。

實施Windows服務從數據庫中讀取並提取需要用他的內容發送的電子郵件很好嗎?

所以在這一點上,我們不確定什麼是實施電子郵件發送過程的正確和優雅的方式。我們在互聯網上進行大量搜索來回答這個問題,但沒有成功。

您能否與我們分享您對本案的看法或經驗?

回答

2

是好實現的Windows 服務從有需要是 與他的內容發送給數據庫和 提取電子郵件閱讀?

這取決於。如果您的核心邏輯是關鍵任務型的,並且不希望在應用程序與電子郵件服務器通信時延遲執行,那麼您可以將責任委託給某種服務。

如果這是責任到 商業邏輯層做這個工作或者 表現層。如果 業務層需要發送電子郵件 那麼他的工作是構建電子郵件 模板或 表示層的工作。

雖然您決定在同一過程中完成此任務(不委託創建雙贏服務),但建議您在業務邏輯層中完成此任務。這樣,就可以在另一個應用程序/組件中重用這個邏輯而沒有太多麻煩(可重用性)。

邏輯層是 只是一個類庫,它不能老是叫 某種asp.net頁面來提取 的HTML。

您不想訪問UI以獲取模板,因爲您可以使用DB-Table來存儲電子郵件模板。

[更新]電子郵件是html..you能得到你的設計師的幫助下創建你希望你的電子郵件看起來像並將其保存在一個數據庫中的模板,一個好看的HTML。對於動態字段(例如標題,正文),您可以放置​​一個特殊標記({head},{body}),並使用實際內容將其替換爲業務邏輯。

+0

好的,我們希望將它保留在業務邏輯層中,以便在其他應用程序中重用此邏輯。你對電子郵件模板建議什麼?基於表示層的應用程序的電子郵件模板樣式可能會有所不同? – sebascomeau

+0

我更新了回答這個問題的答案。看一下。 – Illuminati

+0

好的答案,我們考慮了這種方法並使用了MailDefinition對象。 – sebascomeau

0

我通常有業務邏輯層處理這個問題,因爲我考慮確定誰應該接收電子郵件作爲邏輯的一部分。然後,我將通常使業務層建立消息並確定收件人,然後將所有消息排隊到ThreadPool或其他異步發送電子郵件的方式。

我會避免的一件事情是從您的業務邏輯中使用對SmtpClient.SendAsync的簡單調用。我遇到的問題是,如果SendAsync在短時間內被調用次數太多,可能會遇到交換或任何電子郵件服務器的併發連接數問題。所以在我的情況下,我們的交換服務器最多有50個併發連接,但是如果我必須在批處理作業中發送300封電子郵件,我需要將它們排列在不超過50個同時發送的位置。 ThreadPool適用於此。

+0

好吧,我會檢查異步的電子郵件發送。 – sebascomeau