Database Mail 疑難排解:郵件排在佇列中,sysmail_event_log 或 Windows 應用程式事件記錄中沒有項目

此主題描述如何針對電子郵件訊息已正確排入佇列,但 sysmail_event_log 檢視或 Windows 應用程式事件記錄檔中沒有出現外部程式活動的問題進行疑難排解。

Database Mail 依賴 Service Broker,才能將電子郵件訊息置於佇列。如果已停止 Database Mail,或如果未在 msdb 資料庫中啟動 Service Broker 訊息傳遞,則 Database Mail 會將訊息資料庫置於佇列,但無法傳遞訊息。在此情況下,Service Broker 訊息會繼續保留在 Service Broker 郵件佇列中。Service Broker 並未啟動外部程式,因此 sysmail_event_log 中沒有項目,而且 sysmail_allitems 與相關檢視中的項目狀態並未更新。

執行以下陳述式來檢查 Database Mail 是否已啟用:

SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb';

0 值指出未在 msdb 資料庫中啟動 Service Broker 訊息傳遞。若要更正這個問題,請在資料庫中啟動 Service Broker。如需啟動 Service Broker 訊息傳遞的詳細資訊,請參閱<如何:啟動資料庫中的 Service Broker 訊息傳遞 (Transact-SQL)>。

Database Mail 仰賴許多內部預存程序。為降低介面區,安裝新的 SQL Server 時會停用這些預存程序。若要啟用這些預存程序,請使用 sp_configure 系統預存程序的 Database Mail XP 選項

Database Mail 可能已在 msdb 資料庫中停止了。若要檢查 Database Mail 的狀態,請執行以下陳述式:

EXECUTE dbo.sysmail_help_status_sp;

若要在郵件主機資料庫中啟動 Database Mail,請在 msdb 資料庫中執行下列命令:

EXECUTE dbo.sysmail_start_sp;

Service Broker 會在啟動時檢查訊息的對話存留時間,因此任何已在 Service Broker 傳輸佇列的訊息,只要它的存留時間比設定的對話存留時間還要長,就會立即失敗。Database Mail 會更新 sysmail_allitems 與相關檢視中失敗訊息的狀態。您必須判斷是否再次傳送電子郵件訊息。如需設定 Database Mail 使用的對話存留時間的詳細資訊,請參閱<sysmail_configure_sp (Transact-SQL)>。