sysmail_unsentitems (Transact-SQL)
適用於:SQL Server Azure 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 資料庫角色。 由系統管理員固定伺服器角色的成員執行時,此檢視會顯示所有未傳送或重試的訊息。 所有其他使用者只會看到 他們提交的未傳送 或 重試 訊息。