Database Mail 疑難排解:一般步驟

Database Mail 疑難排解牽涉到檢查下列 Database Mail 系統的一般區域。這些程序雖然是以邏輯順序來呈現,但可以使用任何順序來評估。

判斷是否已啟用 Database Mail

  1. 在 [開始] 功能表上,指向 [所有程式],指向 [Microsoft SQL Server 2005],再指向 [組態工具],然後按一下 [SQL Server 介面區組態]

  2. 按一下 [功能的介面區組態]

  3. [MSSQLSERVER] 下,展開 [Database Engine],然後按一下 [Database Mail]

  4. 確定已選取 [啟用 Database Mail 預存程序],然後按一下 [套用]

  5. 結束「SQL Server 介面區組態」工具。

判斷是否已正確設定使用者使其可以傳送 Database Mail

  1. 若要傳送 Database Mail,使用者必須是 DatabaseMailUserRole 的成員。系統管理員 (sysadmin) 固定伺服器角色和 msdbdb_owner 角色的成員自動為 DatabaseMailUserRole 角色的成員。若要列出 DatabaseMailUserRole 的所有其他成員,請執行以下陳述式:

    EXEC msdb.sys.sp_helprolemember 'DatabaseMailUserRole' ;
    
  2. 若要將使用者加入 DatabaseMailUserRole 角色,請使用以下陳述式:

    sp_addrolemember @rolename = 'DatabaseMailUserRole', 
       @membername = '<database user>'
    
  3. 若要傳送 Database Mail,使用者必須至少擁有一個 Database Mail 設定檔的存取權。若要列出使用者 (主體) 和他們可存取的設定檔,請執行以下陳述式。

    EXEC msdb.dbo.sysmail_help_principalprofile_sp ;
    
  4. 使用「Database Mail 組態精靈」可建立設定檔,並授與使用者對設定檔的存取權。

確認已啟動 Database Mail

  1. 當有電子郵件訊息要處理時,Database Mail 外部程式就會啟動。若在指定的逾時期限內沒有訊息需要傳送,程式就會結束。若要確認 Database Mail 是否已啟動,請執行以下陳述式。

    EXEC msdb.dbo.sysmail_help_status_sp ;
    
  2. 如果 Database Mail 未啟動,請執行以下陳述式來啟動它:

    EXEC msdb.dbo.sysmail_start_sp
    
  3. 如果 Database Mail 外部程式已啟動,請使用以下陳述式檢查郵件佇列的狀態:

    EXEC msdb.dbo.sysmail_help_queue_sp @queue_type = 'mail' ;
    

    郵件佇列應該為 RECEIVES_OCCURRING 狀態。狀態佇列會隨時間而變動。如果郵件佇列狀態不是 RECEIVES_OCCURRING,請試著使用 sysmail_stop_sp 停止佇列,然後再使用 sysmail_start_sp 啟動佇列。

ms187540.note(zh-tw,SQL.90).gif附註:
使用 sysmail_help_queue_sp 結果集的 length 資料行可判斷 Mail 佇列中的電子郵件數目。

判斷 Database Mail 的問題是否會影響設定檔中的所有帳戶或只影響部分帳戶

  1. 如果您判斷是只有部分設定檔可以傳送郵件,那麼可能是有問題的設定檔使用的 Database Mail 帳戶出問題。若要判斷哪些帳戶可以成功傳送郵件,請執行以下陳述式:

    SELECT sent_account_id, sent_date FROM msdb.dbo.sysmail_sentitems ;
    
  2. 如果不能使用的設定檔沒有使用任何列出的帳戶,則可能是該設定檔的所有可用帳戶都無法正常使用。若要測試個別帳戶,請使用「Database Mail 組態精靈」建立一個含有單一帳戶的設定檔,然後使用新的帳戶從 [傳送測試電子郵件] 對話方塊來傳送電子郵件。

  3. 若要檢視 Database Mail 傳回的錯誤訊息,請執行以下陳述式:

    SELECT * FROM msdb.dbo.sysmail_event_log ;
    
ms187540.note(zh-tw,SQL.90).gif附註:
當 Database Mail 將郵件傳遞到 SMTP 郵件伺服器之後,它會視為郵件已傳送。接下來所發生的錯誤,例如收件者的電子郵件地址無效,可能會使得郵件沒有傳遞出去,但是不會包含在 Database Mail 的記錄檔中。

設定 Database Mail 重試郵件傳遞

  1. 如果您判斷 Database Mail 是因為無法正確連接 SMTP 伺服器而失敗,您可以增加 Database Mail 嘗試傳送每則訊息的次數,來提高郵件成功傳遞的比率。請開啟「Database Mail 組態精靈」,並選取 [檢視或變更系統參數] 選項。或者,也可以將多個帳戶與設定檔關聯,讓主要帳戶具有容錯移轉的機制,Database Mail 就可以使用容錯移轉帳戶來傳送電子郵件。

  2. 在 [設定系統參數] 頁面上,[帳戶重試嘗試] 的預設值是 5 次,[帳戶重試延遲] 的預設值是 60 秒,表示如果無法在 5 分鐘內連接 SMTP 伺服器,訊息傳遞就會失敗。增加這些參數可延長訊息傳遞失敗前的時間。

ms187540.note(zh-tw,SQL.90).gif附註:
傳送大量訊息時,較大的預設值會增加可靠性,不過很多訊息一直重複嘗試傳遞,也會大幅增加使用的資源。請解決導致 Database Mail 無法正常連絡 SMTP 伺服器的網路或 SMTP 伺服器問題,來處理根本的問題。

安全性

您必須是系統管理員 (sysadmin) 固定伺服器角色的成員,才能對 Database Mail 各方面進行疑難排解。不是系統管理員 (sysadmin) 固定伺服器角色成員的使用者,只能取得他們嘗試傳送之電子郵件,而無法取得由其他使用者傳送之電子郵件的相關資訊。

請參閱

工作

Database Mail 疑難排解

概念

Database Mail
Database Mail 架構

其他資源

Database Mail 和 SQL Mail 預存程序 (Transact-SQL)
Database Mail 檢視 (Transact-SQL)
Database Mail 組態精靈

說明及資訊

取得 SQL Server 2005 協助