SQL Server から E メールを送信する
SQL Server からの E メール送信
エラー等を知らせる為に SQL Server から E メールを送信したい時ありますよね。
ここでは、SQL Server から E メールを送信する方法をご紹介します。
Database Mail (データベース・メール)を設定する
SQL Server から E メールを送信する前に、 Database Mail を設定しておく必要があります。
sysmail_add_account_sp や sysmail_add_profile_sp などの Database Mail ストアドプロシジャー を使って、クエリーでアカウントの作成や設定をすることも可能ですが UI から設定するほうがわかりやすいので、SQL Server Management Studio から設定する方法をご紹介します。
まず、Management > Database Mail を右クリックし、Confirgure Database Mail を選択します。
一番上のオプションを選んで 「Next」 ボタンをクリックします。 もし Database Mail 機能が無効(デフォルト)の場合は、有効化するか聞いてきますので、有効化してください。
※ここで有効化しそこねた方は、以下のスクリプトで有効化してください。
USE master;
GO
EXEC sp_configure 'show advanced option', '1';
RECONFIGURE;
GO
EXEC sp_configure 'Database Mail XPs', 1;
RECONFIGURE;
プロフィール名を入力して、データベースメールアカウント(SMTP の情報) を追加します。 そこからは、今回はプライベートプロファイルにするので Next > Next > Next > Finish で OK です。
T-SQL で E メールを送信する
T-SQL で E メールを送信するには、sp_send_dbmail というデータベースメール・ストアドプロシジャーを使います。
sp_send_dbmail は msdb データベースに存在するので、他のデータベースから使用する場合は msdb.dbo.sp_send_dbmail のように指定して実行してください。
シンプルな E メールを送信するクエリーは以下の通りです。
@profile_name = 'MyProfile',
@recipients = 'tomoko@sql55.com',
@subject = 'Test Database Mail',
@body = N'これはデータベースメールのテストです。';
@query にクエリーを指定すると、そのクエリーの結果が @body に続けて、E メールの本文に入ります。 さらに @attach_query_result_as_file = 1 と指定すると、そのクエリーの結果をテキストファイルの添付ファイルとして E メールが送信されます。
@query でテーブルなどを指定する際には、データベース名も指定するのを忘れないでくださいね。
@profile_name = 'MyProfile',
@recipients = 'tomoko@sql55.com',
@subject = 'Test Database Mail',
@body = N'これはデータベースメールのテストです。',
@query = 'SELECT * FROM test.dbo.GroupMembers;', @attach_query_result_as_file = 1;
E メールの受信結果は以下のような感じです。
CC 等、その他の sp_send_dbmail のオプションは、マイクロソフトの sp_send_dbmail (Transact-SQL) の T-SQL リファレンスを参考にしてくださいね!