適用対象:SQL Server
Azure SQL Managed Instance
この記事では、Transact-SQL を使用して SQL Server のデータベース メールを使用して送信された電子メール メッセージの状態を確認する方法について説明します。
- データベース メールは、送信電子メール メッセージのコピーを保持し、
sysmail_allitems
データベースのsysmail_sentitems
、sysmail_unsentitems
、sysmail_faileditems
、msdb
ビューに表示します。 - データベース メール外部プログラムはアクティビティをログに記録し、
sysmail_event_log
データベースの Windows アプリケーション イベント ログとmsdb
ビューを介してログを表示します。 - 電子メール メッセージの状態は、 sent、 unsent、 retrying、および failedのいずれかになります。
電子メール メッセージの状態を確認するには、 msdb.dbo.sysmail_event_log
システム ビューに対してクエリを実行します。
Transact-SQL を使用して、データベース メールを使用して送信された電子メールの状態を表示する
sysmail_allitems
またはmailitem_id
で目的のメッセージを指定して、sent_status
テーブルから選択します。外部プログラムから返された電子メールメッセージの状態を確認するには、
sysmail_allitems
列でsysmail_event_log
をmailitem_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