2010-02-20 36 views
2

我繼承了一個ASP.NET網站使用利用數據庫郵件通過發送觸發基於插入電子郵件到消息表中的MSSQL數據庫2K8用C#編寫:|其中發生任何故障的東西太多了回滾,不會被記錄,並沒有發送電子郵件......應用電子郵件架構

什麼亂七八糟的。我過去寫過幾個電子郵件子系統,我想在這裏開始重寫之前我會要求輸入。在Microsoft環境中排隊/發送電子郵件的最佳做法是什麼?我應該把郵件推送到隊列中,從那裏拉,發送,登錄? DB電子郵件似乎是一個失敗。在SQL服務器中管理隊列嗎? SQL Server調用C#應用程序嗎?如果電子郵件發送失敗,什麼是恢復的好方法?

感謝您的任何見解!

+0

你在這裏看到一個答案?我不知道,我會接受你的問題。 – 2010-03-09 16:51:06

+0

@Hottester意思是「一般」。 – 2010-07-22 15:45:23

+0

@George Stocker我不知道我是否只問過「壞問題」或什麼,但我發現我的問題變成了滾滾草。我很想有更多的答案。我將努力探索更多重點明確的問題。 – 2010-08-19 14:56:18

回答

2

我認爲你是正確的使用系統功能完全分離:使用SQL數據,並推動電子郵件到一個完全不同的「服務提供商」;我假設你有某種業務邏輯層將協調這一點?

我不能根據經驗(特別是電子郵件)的「最佳實踐」來談論,但是抽象出電子郵件服務(就像你抽象出數據訪問一樣)絕對是正確的道路,而且這可能是你現在需要做出的關鍵決定。然後你可以有不同的電子郵件實現(包括SQL,如果你真的想的話)。

根據卷 - 你看看異步調用或同步調用? WCF似乎是處理通信的好候選者 - 這將允許您將數據(用於電子郵件)發送到內置隊列的終點,或者可以(通過WCF)調用同步執行的Web服務。

0

您可以通過sql-server發送郵件。欲瞭解更多請參考this

它的架構是here

通過C#發送郵件的另一種實現this,因爲他們已經開發了一個電子郵件工廠實現...希望這有助於

+0

感謝您的反饋意見。我知道數據庫郵件,在這種情況下,我覺得它是一個失敗。就以db郵件作爲組件的整個過程而言,您是否有任何其他輸入? – 2010-02-20 05:27:41

+0

@Ben - 檢查數據庫郵件的文檔,它處理重試等,你可以挖掘到數據庫,並與數據等看到表。 PK :-) – 2010-02-20 05:28:07

+0

我聽說你有關重試,但我的經驗有被電子郵件失敗= RAISERROR =沒有重試。也許我的失敗發生在db_mail堆棧的不同位置。 – 2010-02-24 01:26:08

0

sp_send_dbmail地方郵件請求到msdb中的隊列。在發送郵件提交的事務之後,隊列激活一個處理SMTP傳遞的外部進程,包括重試,日誌記錄和所有這些。整個系統非常有彈性,可擴展和高性能。

也許你正在使用的舊的,過時xp_sendmail的系統?