sysmail_unsentitems (Transact-SQL)

適用於:SQL ServerAzure SQL 受控執行個體

針對具有未傳送或重試狀態的每個 Database Mail 訊息 ,各包含一個資料 列。 未傳送或重試狀態的郵件仍在郵件佇列中,隨時可以傳送。 訊息可能會有下列原因而 未傳送 的狀態:

  • 郵件是新的,雖然郵件已放在郵件佇列上,但 Database Mail 正在處理其他訊息,但尚未到達此郵件。

  • Database Mail 外部程式未執行,且未傳送任何郵件。

訊息可能會有下列原因的 重試 狀態:

  • Database Mail 嘗試傳送郵件,但無法連絡 SMTP 郵件伺服器。 Database Mail 會繼續使用指派給傳送郵件之設定檔的其他 Database Mail 帳戶,嘗試傳送郵件。 如果沒有帳戶可以傳送郵件,Database Mail 會等候針對 [帳戶重試延遲 ] 參數設定 的時間長度,然後嘗試再次傳送訊息。 Database Mail 會使用 Account Retry Attempts 參數來判斷嘗試傳送訊息的次數。 只要 Database Mail 嘗試傳送訊息,訊息就會保留 重試 狀態。

當您想要查看要傳送的訊息數量,以及郵件佇列中有多少訊息,請使用此檢視。 一般而言,未傳送 訊息的數目 會很低。 在正常作業期間進行基準測試,以判斷作業訊息佇列中合理的訊息數目。

若要查看 Database Mail 處理的所有訊息,請使用 sysmail_allitems (Transact-SQL) 。 若要查看只有狀態失敗的訊息,請使用 sysmail_faileditems (Transact-SQL) 。 若要查看已傳送的訊息,請使用 sysmail_sentitems (Transact-SQL)

資料行名稱 資料類型 描述
mailitem_id int 郵件佇列中訊息項目的識別碼。
profile_id int 用來提交訊息之設定檔的識別碼。
收件者 varchar(max) 郵件收件者的電子郵件地址。
copy_recipients varchar(max) 接收郵件複本之人員的電子郵件地址。
blind_copy_recipients varchar(max) 接收郵件複本但名稱未出現在郵件標頭中之訊息之者的電子郵件地址。
subject Nvarchar(510) 郵件的主旨行。
身體 varchar(max) 訊息的本文。
body_format Varchar(20) 訊息的本文格式。 可能的值為 TEXT HTML
重要性 Varchar(6) 訊息的重要性 參數。
靈敏度 Varchar(12) 訊息的敏感度 參數。
file_attachments varchar(max) 附加至電子郵件訊息之檔案名的分號分隔清單。
attachment_encoding Varchar(20) 郵件附件的類型。
query varchar(max) 郵件程式所執行的查詢。
execute_query_database sysname 郵件程式在其中執行查詢的資料庫內容。
attach_query_result_as_file bit 當值為 0 時,查詢結果會包含在電子郵件訊息本文的內容之後。 當值為 1 時,結果會以附件的形式傳回。
query_result_header bit 當值為 1 時,查詢結果會包含資料行標頭。 當值為 0 時,查詢結果不包含資料行標頭。
query_result_width int 訊息 的 query_result_width 參數。
query_result_separator char(1) 用來分隔查詢輸出中資料行的字元。
exclude_query_output bit 訊息的 exclude_query_output 參數。 如需詳細資訊,請參閱 sp_send_dbmail (Transact-SQL)
append_query_error bit 訊息的 append_query_error 參數。 0 表示 Database Mail 在查詢中發生錯誤時,不應該傳送電子郵件訊息。
send_request_date datetime 郵件放在郵件佇列上的日期和時間。
send_request_user sysname 提交郵件的使用者。 這是資料庫郵件程式的使用者內容,而不是訊息的 [ 從] 欄位。
sent_account_id int 用來傳送訊息之 Database Mail 帳戶的識別碼。 此檢視一律為 Null。
sent_status Varchar(8) 如果 Database Mail 未嘗試傳送郵件,將會取消傳送 。 如果 Database Mail 無法傳送訊息,但嘗試再次嘗試,將會 重試。
sent_date datetime Database Mail 上次嘗試傳送郵件的日期和時間。 如果 Database Mail 未嘗試傳送訊息,則為 Null。
last_mod_date datetime 資料列上次修改的日期和時間。
last_mod_user sysname 上次修改資料列的使用者。

備註

針對 Database Mail 進行疑難排解時,此檢視可藉由顯示等候傳送的訊息數目,以及訊息等候的時間量,協助您識別問題的本質。 如果未傳送任何訊息,Database Mail 外部程式可能無法執行,或可能有網路問題導致 Database Mail 無法連絡 SMTP 伺服器。 如果許多未傳送的訊息有相同的 profile_id ,SMTP 伺服器可能會有問題。 請考慮將其他帳戶新增至設定檔。 如果訊息正在傳送,但訊息花費太多時間在佇列中,SQL Server 可能需要更多資源來處理所需的訊息數量。

權限

授與 系統管理員 固定伺服器角色和 DatabaseMailUserRole 資料庫角色。 由系統管理員 固定伺服器角色的成員 執行時,此檢視會顯示所有 未傳送 重試 的訊息。 所有其他使用者只會看到 他們提交的未傳送 重試 訊息。