1

我有一個SQL Server數據庫在幾個ASP.NET(VB.NET)網站之間共享,數據庫有一個存儲客戶查詢的表格 - 我希望提供電子郵件通知,通知新的查詢,以關聯組織內的人員並且可能會將一些查詢數據放入電子郵件的正文中)。請有人可以概述我的選擇方面如何實施?SQL Server發送電子郵件通知插入到表中的數據 - 選項?

我的想法是:

  1. 的SQLMail
  2. 數據庫郵件
  3. VB.NET使用System.Net.Mail庫存儲過程?
  4. 其他選項?

選項3似乎是可取的,因爲我知道如何在VB.NET中做到這一點,它是微不足道的。

  • 我的其他選擇是什麼?
  • 有什麼注意事項?
  • 我可以做到這一點,即觸發器(插入量低)?
  • 或者是否至關重要,這是在一個批次即作業中完成的?

任何幫助非常歡迎! 謝謝。

+0

什麼是數據庫郵件的攔截器?當然這比CLR更容易設置。 – 2012-03-21 23:13:55

+0

我已經對數據庫郵件做了一些研究,但我不確定是否需要連接到電子郵件服務器來發送電子郵件 - 如果是這種情況,那麼我不能這樣做,因爲它與我們的Web服務器是分開的。我熟悉如何從VB.NET發送電子郵件,因爲我們在一個ASP.NET(VB.NET)網站上執行此操作,並且發件人實際上是「欺騙」的,但它不是垃圾郵件,因爲它是內部的,DNS記錄包含網絡服務器的IP地址! – 2012-03-21 23:20:24

+0

您可以在任何服務器(包括SQL Server框或Web服務器上)上設置簡單的SMTP服務器。如果您不想使用IIS功能,則還有其他輕量級解決方案可用。您的VB.NET代碼最終還是必須連接到SMTP服務器,爲什麼SQL Server無法連接到同一個SMTP服務器? – 2012-03-21 23:22:16

回答

5

在1),2)和3)之間唯一值得考慮的是2)。 1)是一個死胎,使用一個不合時宜的特徵,因爲它的問題和問題而臭名昭着。 3)是一個壞主意,因爲它破壞了事務一致性(即使插入回滾,也會發送SMTP郵件),並且由於調用者(可能是您的網頁正在呈現)必須等到SMTP交換完成(即同步)。只有2)提供事務一致性並且是異步的(在SMTP完成之前不阻止調用者)。

通常,儘管這樣的任務最好委派給Reporting Services任務。您將創建一個Data-Driven subscriptionemail delivery。這可以即裝即用,無需重新發明輪子。

+0

感謝您的回覆。它絕對需要異步!即使交易回滾,我也不擔心發送的電子郵件 - 這是不受歡迎的,但它不會在公司內造成問題。所以選項2看起來是最好的選擇。我有幾個問題,但我認爲我們只有SQL Server標準版,並且我無法連接到電子郵件服務器來發送電子郵件 - 我必須「欺騙」發件人,但它不是垃圾郵件,因爲它只是內部的, DNS電子郵件記錄確實有服務器IP地址。 – 2012-03-21 23:01:06

+0

你說3)是壞的,因爲即使插入被回滾,SMTP郵件也被髮送。與2)有什麼不同?也就是說,我同意你的看法,但是你認爲這聽起來像是對於3)而言,但沒有其他選擇。 – 2012-03-21 23:15:10

+0

@Aaron:數據庫郵件將'郵件'作爲Service Broker消息發送到'[msdb]'中的db郵件隊列中。如果事務提交,則「數據庫郵件」外部代理拾取並傳遞「消息」。如果它回滾,則SSB消息將回滾並且數據庫郵件代理永遠不會看到它。這在http://technet.microsoft.com/en-us/library/ms175887.aspx中描述。 – 2012-03-21 23:26:49

1

我也曾與此類似的情況,我解決的解決方案是讓C#windows服務每分鐘檢查一次SQL服務器作業隊列。這個工作隊列將包括諸如發送電子郵件之類的工作。然後,您可以在桌面上使用TRIGGER插入一個新的「電子郵件警報」作業,該作業將在下一個週期中獲得。

+0

聽起來很複雜,我會這樣做,如果我知道如何 - 是不是有一個更簡單,但同樣安全的選擇? – 2012-03-21 22:40:44

+0

你的選擇3,使用CLR存儲過程是我能想到的唯一另外一種方式,CLR過程可能與我上面的建議一樣難以實現。一個更簡單的版本將是一個控制檯應用程序,它也檢查SQL Server中的「JobQueue」表,並使用Windows調度程序每分鐘運行一次。 – 2012-03-21 22:46:25

+0

爲什麼控制檯應用程序比調用數據庫郵件的簡單SQL Server代理作業更簡單?更多的運動部件=更多的失敗點。依賴任務調度器(直到W8才真正集羣)可能並不是更好或更簡單的IMHO。 – 2012-03-21 23:21:34