HOME >> Tips >> Microsoft SQL Server

データベースメールを構成して SQL Server からメールを送信する

2015/4/9
文書番号:20327

データベースメールを構成して SQL Server からメールを送信できるようにします。

データベースメールを使用するとストアドプロシージャなどの SQL ステートメント内から処理に応じてメール送信できるようになります。

【設定方法】

  1. SQL Server Management Studio を起動し、データベースへログインします。
    左ペインのツリーから「管理」を展開します。

    クリックで拡大

  2. 「データベースメール」を右クリックし、「データベースメールの構成」をクリックします。

    クリックで拡大

  3. データベースメール構成ウィザードが起動します。
    「次へ」をクリックします。

    クリックで拡大

  4. 【構成タスクの選択】
    「次のタスクを実行してデータベース メールをセットアップする」を選択して「次へ」をクリックします。

    クリックで拡大

  5. 初めてのセットアップのときなど機能が有効になっていない場合にはメッセージが表示されます。
    「はい」をクリックします。

    クリックで拡大

  6. 【新しいプロファイル】
    新しいプロファイルを作成します。
    プロファイル名を設定して SMTP アカウントの「追加」ボタンをクリックします。

    クリックで拡大

  7. 送信先アカウントを登録します。
    SMTP 認証を行っていない設定であれば以下の画面の項目程度を入力すればOKです。
    入力したら「OK」ボタンをクリックします。

    クリックで拡大

  8. 元の画面に戻り、アカウントが追加されたことを確認したら「次へ」をクリックします。

    クリックで拡大

  9. 【プロファイル セキュリティの管理】
    必要に応じてチェックを入れ、「次へ」をクリックします。

    クリックで拡大

  10. 【システム パラメーターの構成】
    アカウントの試行回数など設定内容を調整し、「次へ」をクリックします。

    クリックで拡大

  11. 【ウィザードの完了】
    設定内容が表示されますので確認をして「完了」ボタンをクリックします。

    クリックで拡大

  12. 【構成しています...】
    データベースメールを構成中です。しばらく待ちます。

    クリックで拡大

  13. 【構成しています...】
    構成が完了し、「成功」と表示されれば完了です。
    「閉じる」ボタンをクリックして終了します。

    クリックで拡大

  14. SQL Server からメール送信テストを行います。
    「データベースメール」を右クリックして「テスト電子メールの送信」をクリックします。

    クリックで拡大

  15. プロファイル、宛先など必要な項目を入力して「テスト電子メールの送信」ボタンをクリックします。

    クリックで拡大

  16. 指定した宛先にテストメールが届けば成功です。
    「OK」ボタンをクリックして終了します。

    クリックで拡大

【SQL ステートメントからメールを送信する】

ストアドプロシージャなどのSQL ステートメントからメールを送信します。

--メール送信
EXEC msdb.dbo.sp_send_dbmail
  @profile_name = 'エラー通知'
 ,@recipients = 'user01@contoso.com'
 ,@subject = '更新処理エラー通知'
 ,@body = 'これはデータベースメールのテストです。'
 ;

メールに SQL の結果を付加する場合は @query 変数に SQL 文を指定します。
テーブルなどを指定するときはデータベース名から指定します。
また @attach_query_result_as_file = 1 と指定すると SQL の結果を添付ファイルにしてメールすることができます。

--メール送信
EXEC msdb.dbo.sp_send_dbmail
  @profile_name = '管理者通知'
 ,@recipients = 'user01@contoso.com'
 ,@subject = '更新処理結果通知'
 ,@body = 'これはデータベースメールのテストです。'
 ,@query = 'SELECT * FROM データベース名.dbo.テーブルA'
 ,@attach_query_result_as_file = 1
 ;

メール本文にエラー情報などを含めて送信する場合は以下のようにできます。

DECLARE @MSG VARCHAR(2000);
SET @MSG  = '例外エラーが発生しました。' + CHAR(13) + CHAR(10);
SET @MSG += '===========================================' + CHAR(13) + CHAR(10);
SET @MSG += CHAR(13) + CHAR(10);
SET @MSG += 'エラーNO:' + CONVERT(varchar,ERROR_NUMBER()) + CHAR(13) + CHAR(10);
SET @MSG += 'エラーメッセージ' + CHAR(13) + CHAR(10);
SET @MSG += '-------------------------------------------' + CHAR(13) + CHAR(10);
SET @MSG += ERROR_MESSAGE() ;

--メール送信
EXEC msdb.dbo.sp_send_dbmail
  @profile_name = 'エラー通知'
 ,@recipients = 'user01@contoso.com'
 ,@subject = '更新処理エラー通知'
 ,@body = @MSG
 ;

【参考情報】

[MSDN]データベースメール
https://msdn.microsoft.com/ja-jp/library/ms189635.aspx?f=255&MSPPError=-2147217396
[SQL Server]sp_send_dbmail (Transact-SQL)
https://technet.microsoft.com/ja-jp/library/ms190307.aspx?f=255&MSPPError=-2147217396
[MSDN]データベース メール ストアド プロシージャ (Transact-SQL)
https://msdn.microsoft.com/ja-jp/library/ms177580.aspx?f=255&MSPPError=-2147217396