sp_send_dbmail
SQL Server 2005 で使用しているときに何が起こっているかについての答えを見つけたいと思っています。
これはシナリオです:
SQL サーバーにメール機能を設定しました。あるテーブルに電子メール アドレスがあり、別のテーブルにコンテンツがあります。テーブルで見つかったアドレスごとに、sp_send_dbmail
ストアド プロシージャを使用して、そのアドレスへの新しいメッセージをコンパイルします。
後で上記を実行する独自の SP を実行すると (電子メールを受け取り、受信者への新しいメッセージをコンパイルします)、サーバー上で DatabaseMail90.exe が起動し、電子メールが送信されます。しかし、これが厄介なところです。メールの一部が直接配布されているためです。おそらく同じドメインとネットワーク上にあるためです。複雑なのは、すべてではありませんが、ほとんどの外部メールが msdb.dbo.sysmail_mailitems テーブルでエラーを受け取ることです。しかし、混乱はここで止まりません。msdb.dbo.sysmail_mailitems テーブルにエラーが報告されているにもかかわらず、一部の電子メールは配信されています。
これは、送信済みメッセージのステータスを表示するために使用するクエリです。
SELECT
mailitem_id,
recipients,
subject,
send_request_date,
sent_status, --0 new, not sent, 1 sent, 2 failure or 3 retry.
sent_date
FROM
msdb.dbo.sysmail_mailitems
WHERE
sent_status != 1
データベース メールのシステム パラメータを次のように構成しました。
- アカウントの再試行回数: 3
- アカウント再試行遅延 (秒): 30
- 最大ファイル サイズ (バイト): 50000000 (これほど大きくなることはありませんが、安全のために)
- 添付禁止拡張子:exe、dll、vbs、js
- データベース メール実行可能ファイルの最小有効期間 (秒): 300
- ロギング レベル: 拡張
私のデータベース メール プロファイルは公開されており、既定のプロファイルとして設定されています。また、既存のプロファイルを設定しました。
これは、すべてを実行してメールの送信を開始する SP です。
DECLARE @fldEmail AS VARCHAR(max)
DECLARE @fldSubject AS VARCHAR(max)
DECLARE @fldMessage AS VARCHAR(max)
DECLARE port_cursor CURSOR FOR
SELECT d.[E-Mail],s.Subject,s.HTMLMessage
FROM tbl_NAV_Sendout s,tbl_NAV_DistributionList d
OPEN port_cursor
FETCH NEXT FROM port_cursor
INTO @fldEmail, @fldSubject, @fldMessage
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC msdb.dbo.sp_send_dbmail @recipients = @fldEmail, @subject = @fldSubject, @body = @fldMessage, @body_format = 'HTML', @file_attachments = 'C:\NAVDW\ECNAV.csv', @profile_name = 'DBMail'
FETCH NEXT FROM port_cursor
INTO @fldEmail, @fldSubject, @fldMessage
END
CLOSE port_cursor
DEALLOCATE port_cursor
したがって、疑問は残ります。電子メールをより速く配信するためにセットアップを微調整する方法はありますか? また、本当の質問ですが、電子メールの送信時にエラーが時々発生するのはなぜですか? 送信先のメールアドレスに問題はありません。コードまたはデータベース メール構成で考えられるエラーを見つけるには、どこを参照すればよいですか? このようなことを経験したことがありますか?
msdb.dbo.sysmail_mailitems テーブルのエラーの説明は何ですか? つまり、外部ドメインにエラーが報告されていますが、メールは配信されています。または、メールが配信されない場合、問題の原因をどこで調べればよいでしょうか。