Database Mail 疑難排解:一般步驟
Database Mail 疑難排解牽涉到檢查下列 Database Mail 系統的一般區域。這些程序雖然是以邏輯順序來呈現,但可以使用任何順序來評估。
判斷是否已啟用 Database Mail
在 [開始] 功能表上,指向 [所有程式],指向 [Microsoft SQL Server 2005],再指向 [組態工具],然後按一下 [SQL Server 介面區組態]。
按一下 [功能的介面區組態]。
在 [MSSQLSERVER] 下,展開 [Database Engine],然後按一下 [Database Mail]。
確定已選取 [啟用 Database Mail 預存程序],然後按一下 [套用]。
結束「SQL Server 介面區組態」工具。
判斷是否已正確設定使用者使其可以傳送 Database Mail
若要傳送 Database Mail,使用者必須是 DatabaseMailUserRole 的成員。系統管理員 (sysadmin) 固定伺服器角色和 msdbdb_owner 角色的成員自動為 DatabaseMailUserRole 角色的成員。若要列出 DatabaseMailUserRole 的所有其他成員,請執行以下陳述式:
EXEC msdb.sys.sp_helprolemember 'DatabaseMailUserRole' ;
若要將使用者加入 DatabaseMailUserRole 角色,請使用以下陳述式:
sp_addrolemember @rolename = 'DatabaseMailUserRole', @membername = '<database user>'
若要傳送 Database Mail,使用者必須至少擁有一個 Database Mail 設定檔的存取權。若要列出使用者 (主體) 和他們可存取的設定檔,請執行以下陳述式。
EXEC msdb.dbo.sysmail_help_principalprofile_sp ;
使用「Database Mail 組態精靈」可建立設定檔,並授與使用者對設定檔的存取權。
確認已啟動 Database Mail
當有電子郵件訊息要處理時,Database Mail 外部程式就會啟動。若在指定的逾時期限內沒有訊息需要傳送,程式就會結束。若要確認 Database Mail 是否已啟動,請執行以下陳述式。
EXEC msdb.dbo.sysmail_help_status_sp ;
如果 Database Mail 未啟動,請執行以下陳述式來啟動它:
EXEC msdb.dbo.sysmail_start_sp
如果 Database Mail 外部程式已啟動,請使用以下陳述式檢查郵件佇列的狀態:
EXEC msdb.dbo.sysmail_help_queue_sp @queue_type = 'mail' ;
郵件佇列應該為 RECEIVES_OCCURRING 狀態。狀態佇列會隨時間而變動。如果郵件佇列狀態不是 RECEIVES_OCCURRING,請試著使用 sysmail_stop_sp 停止佇列,然後再使用 sysmail_start_sp 啟動佇列。
附註: |
---|
使用 sysmail_help_queue_sp 結果集的 length 資料行可判斷 Mail 佇列中的電子郵件數目。 |
判斷 Database Mail 的問題是否會影響設定檔中的所有帳戶或只影響部分帳戶
如果您判斷是只有部分設定檔可以傳送郵件,那麼可能是有問題的設定檔使用的 Database Mail 帳戶出問題。若要判斷哪些帳戶可以成功傳送郵件,請執行以下陳述式:
SELECT sent_account_id, sent_date FROM msdb.dbo.sysmail_sentitems ;
如果不能使用的設定檔沒有使用任何列出的帳戶,則可能是該設定檔的所有可用帳戶都無法正常使用。若要測試個別帳戶,請使用「Database Mail 組態精靈」建立一個含有單一帳戶的設定檔,然後使用新的帳戶從 [傳送測試電子郵件] 對話方塊來傳送電子郵件。
若要檢視 Database Mail 傳回的錯誤訊息,請執行以下陳述式:
SELECT * FROM msdb.dbo.sysmail_event_log ;
附註: |
---|
當 Database Mail 將郵件傳遞到 SMTP 郵件伺服器之後,它會視為郵件已傳送。接下來所發生的錯誤,例如收件者的電子郵件地址無效,可能會使得郵件沒有傳遞出去,但是不會包含在 Database Mail 的記錄檔中。 |
設定 Database Mail 重試郵件傳遞
如果您判斷 Database Mail 是因為無法正確連接 SMTP 伺服器而失敗,您可以增加 Database Mail 嘗試傳送每則訊息的次數,來提高郵件成功傳遞的比率。請開啟「Database Mail 組態精靈」,並選取 [檢視或變更系統參數] 選項。或者,也可以將多個帳戶與設定檔關聯,讓主要帳戶具有容錯移轉的機制,Database Mail 就可以使用容錯移轉帳戶來傳送電子郵件。
在 [設定系統參數] 頁面上,[帳戶重試嘗試] 的預設值是 5 次,[帳戶重試延遲] 的預設值是 60 秒,表示如果無法在 5 分鐘內連接 SMTP 伺服器,訊息傳遞就會失敗。增加這些參數可延長訊息傳遞失敗前的時間。
附註: |
---|
傳送大量訊息時,較大的預設值會增加可靠性,不過很多訊息一直重複嘗試傳遞,也會大幅增加使用的資源。請解決導致 Database Mail 無法正常連絡 SMTP 伺服器的網路或 SMTP 伺服器問題,來處理根本的問題。 |
安全性
您必須是系統管理員 (sysadmin) 固定伺服器角色的成員,才能對 Database Mail 各方面進行疑難排解。不是系統管理員 (sysadmin) 固定伺服器角色成員的使用者,只能取得他們嘗試傳送之電子郵件,而無法取得由其他使用者傳送之電子郵件的相關資訊。
請參閱
工作
概念
Database Mail
Database Mail 架構
其他資源
Database Mail 和 SQL Mail 預存程序 (Transact-SQL)
Database Mail 檢視 (Transact-SQL)
Database Mail 組態精靈