適用対象:SQL Server
Azure SQL Managed Instance
この記事では、データベース メールからの電子メール メッセージが正常にキューに入れられますが、メッセージが配信されない問題をトラブルシューティングする方法について説明します。
問題を診断する
データベース メール外部プログラムは、 msdb
データベースの電子メール アクティビティをログに記録します。
まず、データベース メールが有効になっていることを確認するには、次の例のように、 システム ストアド プロシージャの
sp_configure
を使用します。EXEC sp_configure 'show advanced', 1; RECONFIGURE; EXEC sp_configure; GO
次に、
msdb
データベースで次のステートメントを実行して、メール キューの状態を確認します。EXEC msdb.dbo.sysmail_help_queue_sp @queue_type = 'Mail';
列の詳細については、「sysmail_help_queue_sp (Transact-SQL)」を参照してください。
sysmail_event_log
ビューでアクティビティを確認します。 このビューには、データベース メール外部プログラムが開始されていることを示すエントリが含まれています。sysmail_event_log
ビューにエントリがない場合は、 にある症状sysmail_event_log
を参照してください。sysmail_event_log
ビューにエラーがある場合は、特定のエラーのトラブルシューティングを行います。sysmail_allitems
ビューでメッセージの状態を確認します。
メッセージの状態 - unsent
未送信の状態は、データベース メール外部プログラムがまだ電子メール メッセージを処理していないことを示します。
データベース メール外部プログラムがメッセージの処理に遅れている可能性があります。外部プログラムがメッセージを処理する速度は、ネットワークの状態、再試行タイムアウト、メッセージの量、SMTP サーバーの容量によって異なります。 問題が解決しない場合は、複数のプロファイルを使用して、複数の SMTP サーバーにメッセージを分散させることを検討します。 SQL Server から送信された電子メールの負荷を確認して、送信された電子メールが有効で意図されていることを確認します。
正常に配信されたメッセージを対象に、最終更新日をチェックします。 最後に成功した配信がしばらく前に発生した場合は、 sysmail_event_log
ビューを調べて、外部プログラムが Service Broker によって正常に開始されたことを確認します。 最後の試行で外部プログラムが開始されなかった場合は、データベース メール外部プログラムが適切なディレクトリにあり、SQL Server のサービス アカウントにこの実行可能ファイルの実行権限があるかどうかを確認します。 Windows アプリケーション イベント ログで、データベース メールに関連するエラーを確認します。
注
古い未送信メッセージを削除するには、配信不能メッセージがキュー内の最も古いメッセージになるまで待ってから、システム ストアド プロシージャ msdb.dbo.sysmail_delete_mailitems_sp を使用してメッセージを削除します。
メッセージの状態 - retrying
再試行の状態は、データベース メールが SMTP サーバーにメッセージを配信しようとしましたが、配信できなかったことを示します。 通常、この現象は、ネットワークの中断、SMTP サーバーの障害、または正しく構成されていないデータベース メール アカウントによって発生します。 メッセージは最終的に成功または失敗し、Windows アプリケーション イベント ログにメッセージを投稿する必要があります。
メッセージの状態 - sent
状態 sent は、電子メール メッセージがデータベース メール外部プログラムから SMTP サーバーに正常に配信されたことを表します。
そのメッセージが配信先に到達しなかった場合は、データベース メールから送信されたメッセージは SMTP サーバーで受信されていますが、最終的な受信者には配信されていません。 SMTP サーバーのログを確認するか、SMTP サーバーの管理者に問い合わせてください。 Outlook Express などの別のクライアントを使用して、SMTP メール サーバーをテストすることもできます。
メッセージの状態 - failed
状態 failed は、電子メール メッセージをデータベース メール外部プログラムから SMTP サーバーに配信できなかったことを表します。
この場合、 msdb.dbo.sysmail_event_log
システム ビューには、外部プログラムからの詳細情報が含まれます。
sysmail_faileditems
とsysmail_event_log
を結合して詳細なエラー メッセージを取得するサンプル クエリについては、「データベース メールで送信された電子メール メッセージの状態を確認する」を参照してください。 このような問題では、宛先のアドレスが間違っているか、ネットワーク上で問題が発生したためにデータベース メールが 1 つ以上のフェールオーバー アカウントにアクセスできないことが最も一般的な原因です。 SMTP サーバーで問題が発生すると、その SMTP サーバーでメールが拒否されることがあります。 データベース メール構成ウィザードを使用して、[ログ記録レベル] を [詳細] に変更し、テスト メールを送信して障害発生時点を調べます。