2013-03-20 34 views
7

我有一個存儲過程每晚運行,應該將查詢結果發送給多個收件人。但是,大多數時候,最終會在一分鐘後發送重複的電子郵件。我使用的代碼如下(所有電子郵件和數據庫裁判已經改變):使用SP_SEND_DBMAIL向所有收件人發送重複電子郵件的存儲過程

EXEC msdb.dbo.sp_send_dbmail 
@recipients = '[email protected]', 
@copy_recipients = '[email protected];[email protected];[email protected]', 
@subject = 'Example Email', 
@profile_name = 'ExampleProfile', 
@query = 'SELECT name 
    FROM table 
    WHERE date BETWEEN (getdate() - 1) AND getdate()', 
@attach_query_result_as_file = 1 

任何幫助,這將不勝感激。

+0

這個電話看起來不錯,但你怎麼打電話呢?你確定你沒有兩次打電話嗎? – 2013-03-20 11:05:21

+0

我通過SQL Server代理中的作業管理器調用它,並且據我所見,它只在Job Scheduler中被調用一次。 – andewM 2013-03-20 11:15:09

+0

您是否檢查過日誌? – 2013-03-20 11:16:06

回答

5

該解決方案證明將服務器上的帳戶重試帳戶數減少爲0(在數據庫郵件配置嚮導中)。

0

如果它發送重複的電子郵件給收件人,那麼這意味着您的SP在一天內被多次調用。檢查調用此SP的SQL作業中設置的調用時間。它應該在一天之內避免重複的電子郵件。

+0

感謝您的答覆,但我已經檢查了工作清單,我確定該程序只運行一次。 – andewM 2013-03-20 12:23:39

0

如果它不是從SQL Server發送兩次郵件,也不是郵件服務器的問題,那麼請確保您沒有使用郵件篩選器檢查郵件,然後您可能會收到兩次郵件。

+0

感謝您的輸入,但我已選中並且沒有使用任何Outlook郵件過濾器。 – andewM 2013-03-27 11:26:44

0

我建議你再向你的數據庫中添加一個表,它將保存上次發送給每個收件人的郵件的時間。

沒有這樣的表格,你不能真正知道發生了什麼。如果你偶然運行SP多次呢?沒有任何東西可以阻止它發送電子郵件。

關於這個問題 - 您的郵件服務器是否在發送的項目中保留副本?如果是這樣,您可能需要檢查所有郵件的發送日期。這可能會給你一個關於發生了什麼的很好的信息。

+0

謝謝您的輸入。我停止了這項工作,看看程序是否正在其他地方運行,但是我發現情況並非如此,最終重新創建了這項工作來查看它是否解決了問題。它似乎已經成功了。 – andewM 2013-03-27 11:25:39

+0

我很高興知道我幫助:) – 2013-03-28 10:06:48

0

發生這種情況的原因是,接收電子郵件的地址(無論是在組中還是在個人中)的電子郵件地址都不再有效。雖然您可以按照接受的答案消除重試,但最好的方法是清理分配。

0

我有一個類似的問題,我們在一封電子郵件中有多個收件人,它會生成2個發送的電子郵件。這個問題最終成爲其中一個收件人不再有效,重試會將電子郵件發送給所有收件人,而不僅僅是發送失敗的郵件。 msdb中有許多視圖可以幫助您找到無效的收件人。他們開始dbo.sysmail_ <東西>

這個問題有幾個解決方案。

  1. 將每個收件人分爲單獨的電子郵件。
  2. 從列表
  3. 設置你的重試中DBMail設置刪除無效收件人0
0

我有同樣的問題重複而使用SELECT語句在@query中的每一個身體發送文本常量電子郵件,除了使用@body和@subject根據某些條件發送自定義文本。

一封電子郵件中包含自定義文本和查詢文本。重複的電子郵件僅包含帶有插入「SQL Server消息」主題行的系統的@query文本(無自定義文本)。

我運行了SELECT * FROM msdb.dbo.sysmail_sentitems,並確定有足夠的電子郵件被髮送兩次。看看sysmail_configuration顯示AccountRetryAttempts paramValue = 1.

問題消失後,我完全從存儲過程中刪除@query(執行更改),運行sp。然後我把@query放回sp中,執行這個改動。之後,電子郵件開始只發送一次。去搞清楚。

0

確保您在更新時沒有任何其他觸發器中的其他觸發器中的其他Update語句。

即使我面臨類似的問題,當我與我的觸發器進行交叉檢查時,我發現我在另一個觸發器中使用了另一個Update語句。它引發了對觸發器的多次觸發。因此,兩封郵件被觸發。

相關問題