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 を選択します。

Management - Database Mail メニュー


一番上のオプションを選んで 「Next」 ボタンをクリックします。 もし Database Mail 機能が無効(デフォルト)の場合は、有効化するか聞いてきますので、有効化してください。

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 です。

Database Mail の設定

T-SQL で E メールを送信する

T-SQL で E メールを送信するには、sp_send_dbmail というデータベースメール・ストアドプロシジャーを使います。

sp_send_dbmail は msdb データベースに存在するので、他のデータベースから使用する場合は msdb.dbo.sp_send_dbmail のように指定して実行してください。


シンプルな E メールを送信するクエリーは以下の通りです。

EXEC msdb.dbo.sp_send_dbmail
 @profile_name = 'MyProfile',
 @recipients = 'tomoko@sql55.com',
 @subject = 'Test Database Mail',
 @body = N'これはデータベースメールのテストです。';

Database Mail を送信するクエリー


@query にクエリーを指定すると、そのクエリーの結果が @body に続けて、E メールの本文に入ります。 さらに @attach_query_result_as_file = 1 と指定すると、そのクエリーの結果をテキストファイルの添付ファイルとして E メールが送信されます。

@query でテーブルなどを指定する際には、データベース名も指定するのを忘れないでくださいね。

EXEC msdb.dbo.sp_send_dbmail
 @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 メールの受信結果は以下のような感じです。

Database Mail を受信結果1

Database Mail を受信結果2


CC 等、その他の sp_send_dbmail のオプションは、マイクロソフトの sp_send_dbmail (Transact-SQL) の T-SQL リファレンスを参考にしてくださいね!

© 2010-2024 SQL Server 入門