次の方法で共有


データベース メールから送信された電子メール メッセージの状態の確認

適用対象:SQL ServerAzure SQL Managed Instance

この記事では、Transact-SQL を使用して SQL Server のデータベース メールを使用して送信された電子メール メッセージの状態を確認する方法について説明します。

  • データベース メールは、送信電子メール メッセージのコピーを保持し、sysmail_allitems データベースのsysmail_sentitemssysmail_unsentitemssysmail_faileditemsmsdb ビューに表示します。
  • データベース メール外部プログラムはアクティビティをログに記録し、sysmail_event_log データベースの Windows アプリケーション イベント ログとmsdb ビューを介してログを表示します。
  • 電子メール メッセージの状態は、 sentunsentretrying、および failedのいずれかになります。

電子メール メッセージの状態を確認するには、 msdb.dbo.sysmail_event_log システム ビューに対してクエリを実行します。

Transact-SQL を使用して、データベース メールを使用して送信された電子メールの状態を表示する

  • sysmail_allitemsまたはmailitem_idで目的のメッセージを指定して、sent_statusテーブルから選択します。

  • 外部プログラムから返された電子メールメッセージの状態を確認するには、sysmail_allitems列でsysmail_event_logmailitem_idビューに結合します。

    データベース メール外部プログラムの既定では、正常に送信されたメッセージについての情報がログに記録されません。 すべてのメッセージをログに記録するには、 データベース メール構成ウィザード[システム パラメーターの構成]ページを使用して、ログのレベルを詳細に設定します。

次の例では、外部プログラムが正常に送信できなかった、 danw への電子メール メッセージに関する情報を表示します。 このステートメントは、件名、外部プログラムでメッセージの送信に失敗した日時、およびデータベース メール ログに記録されているエラー メッセージの一覧を表示します。

USE msdb ;  
GO  

-- Show the subject, the time that the mail item row was last  
-- modified, and the log information.  
-- Join sysmail_faileditems to sysmail_event_log   
-- on the mailitem_id column.  
-- In the WHERE clause list items where danw was in the recipients,  
-- copy_recipients, or blind_copy_recipients.  
-- These are the items that would have been sent  
-- to danw.  

SELECT items.subject,  
    items.last_mod_date  
    ,l.description 
FROM dbo.sysmail_faileditems AS items  
INNER JOIN dbo.sysmail_event_log AS l  
    ON items.mailitem_id = l.mailitem_id  
WHERE items.recipients LIKE '%danw%'    
    OR items.copy_recipients LIKE '%danw%'   
    OR items.blind_copy_recipients LIKE '%danw%';
GO