2013-02-01 34 views
25

sp_send_dbmailを使用してキューに入れられた特定の電子メールが最終的にExchangeサーバーから正常に送信されたかどうかを確認する方法を探しています。私はシステムテーブルmsdb.dbo.sysmail_mailitemsmsdb.dbo.sysmail_logを見てきました。 msdb.dbo.sysmail_logは2つのうちのより役に立つと思われます。具体的には、そのdescription列。私がこれまで行ってきた実験からは、エラーが発生するたびに、次の形式のメッセージがdescription列に表示されようだ:sp_send_dbmailが成功したかどうかを確認

メールが原因で、メール サーバーの受信者に送信することができませんでした失敗。 (アカウント3(2012-11-01T11:28:04)を使用してメールを送信する 例外メッセージ:メールサーバーにメールを送信できません(メールボックス は利用できませんでした)5.7.1中継できませんでした thisemail @ email .com)。

これは、同じprocess_idを共有する他の行で囲まれています。囲んでいるレコードの説明が

DatabaseMailプロセスは、電子メールが正常に送信された場合DatabaseMailプロセスは

をシャットダウンして

を開始されていますそれらの間に囲まれた行を除いて、同じ2行が表に記録されます。

私は成功した送信を持っているのであれば、次の表に

enter image description here

表示され、私は、ログレコードを送信障害を持っている場合は、この

enter image description here

があります送信が失敗した場合、または送信が成功した場合のエントリの記録方法の他のインスタンスたとえば、送信のエントリが4行(開始時および終了時に2件、電子メールが正常に送信されたことを示す2件)のエントリがある可能性があります。上記のパターンから分岐したログレコードは見つかりませんでしたが、この前提に基づいてロジックを書く前に確信したいと思います。

答えて

22

sysmail_faileditemsは、失敗したメールの一覧のみを表示します。成功したメールのリストを表示する必要がある場合は、sysmail_mailitemsを使用する必要があります。

すべての電子メールの詳細を取得するには、以下のクエリを使用して、同じ日を送った:

SELECT * FROM msdb..sysmail_mailitems WHERE sent_date > DATEADD(DAY, -1,GETDATE()) 

そしてここでは、過去24時間の失敗したすべての電子メールを取得するための完全なクエリです:

SELECT items.subject , 
     items.recipients , 
     items.copy_recipients , 
     items.blind_copy_recipients , 
     items.last_mod_date , 
     l.description 
FROM msdb.dbo.sysmail_faileditems AS items 
     LEFT OUTER JOIN msdb.dbo.sysmail_event_log AS l 
        ON items.mailitem_id = l.mailitem_id 
WHERE items.last_mod_date > DATEADD(DAY, -1,GETDATE()) 
関連する問題