記事一覧

ストアドプロシージャでメールを送信する方法 -Transact SQL- | SQL Server


今回は SQL Server のストアドプロシージャ内においてメールを送信する記述方法について覚え書きします。サーバーでのメールアカウントの設定は前回の記事「メール送信設定を構成する方法」をご参考ください。


sqlserver_mail_20.png


前提条件
・Windows 7 professional 以降 / Windows Server 2008 R2 以降
・SQL Server 2008 Developer / Standard / Enterprise 以降
サーバー上でメール送信設定の構成が済んでいること



1.実装方法

メール送信自体は SQLServer 標準の msdb.dbo.sp_send_dbmail で送信が可能ですが、プロファイル名など引数に渡さなくてはなりませんので、少しでも引数を少なく実行できるようにオリジナルのストアドプロシージャを実装します。
(以下のようにプロファイルを自動取得してメールを送信する専用のストアドプロシージャを作成します。)

USE testDB
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

DROP PROCEDURE IF EXISTS dbo.usp_SendMail;
GO

CREATE PROCEDURE dbo.usp_SendMail
     @MailTo      NVARCHAR(100)
    ,@MailTitle   NVARCHAR(100)
    ,@MailBody    NVARCHAR(1000)
,@LogId INT OUTPUT
    ,@MailFormat VARCHAR(4)     = 'TEXT'
    ,@MailFrom    NVARCHAR(100)  = ''
    ,@MailCc      NVARCHAR(100)  = ''
    ,@MailBcc     NVARCHAR(100)  = ''
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @ProfileName    NVARCHAR(100);

    --SQL Server に設定したプロファイル名を取得します
    SELECT @ProfileName = SP.[name]
      FROM msdb.dbo.sysmail_profile AS SP
     INNER JOIN
           msdb.dbo.sysmail_profileaccount AS SPA
        ON SP.profile_id = SPA.profile_id
     INNER JOIN
           msdb.dbo.sysmail_account AS SA
        ON SPA.account_id = SA.account_id
     INNER JOIN
           msdb.dbo.sysmail_server AS SS
        ON SA.account_id = ss.account_id
    WHERE SA.email_address = @MailFrom
        OR (ISNULL(@MailFrom, '') = '' AND SPA.sequence_number = 1)
        ;

    --プロファイル名でメール送信します
    EXEC msdb.dbo.sp_send_dbmail
             @profile_name = @ProfileName
            ,@copy_recipients = @MailCc
            ,@blind_copy_recipients = @MailBcc
            ,@subject               = @MailTitle
            ,@body                  = @Mailbody
            ,@body_format           = @MailFormat    --'TEXT' OR 'HTML'
--キューに正常に入った場合、mailitem_id が返されます。
,@mailitem_id = @LogId OUTPUT
            ;
END
GO


※パラメータについて参考URL
https://msdn.microsoft.com/ja-jp/library/ms190307(v=sql.120).aspx

※今回のサンプルコードでは送信元メールアドレスは必ずプロファイルに保存されているメールアドレスでなければいけません。プロファイル以外のメールアドレスから送信したい場合は、sysmail_account テーブルにメールアドレスが登録されていない場合の分岐が必要です。また、sp_send_dbmail の引数として、@profile_name のほかに @from_address にも値を代入してください。



2.使用方法

他のストアドプロシージャまたはVBなどのプログラムから呼び出します。

EXEC dbo.usp_SendMail 
    'mailto@mail.co.jp', 'TestTitle', 'BodyMessage', 'HTML', 'test@test.co.jp';




最後までお読みいただき、ありがとうございます。
他にも SQL Server に関する記事をご紹介しておりますのでご参考頂ければ幸いです。


関連記事

コメント

コメントの投稿

カテゴリ別記事一覧

広告

プロフィール

石河 純


著者名 :石河 純
自己紹介:素人上がりのIT技術者。趣味は卓球・車・ボウリング

IT関連の知識はざっくりとこんな感じです。
【OS関連】
WindowsServer: 2012/2008R2/2003/2000/NT4
Windows: 10/8/7/XP/2000/me/NT4/98
Linux: CentOS RedHatLinux9
Mac: macOS Sierra 10.12 / OSX Lion 10.7.5 / OSX Snow Leopard 10.6.8
【言語・データベース】
VB.net ASP.NET C#.net Java VBA
Xamarin.Forms
Oracle10g SQLServer2008R2 SQLAnywhere8/11/16
ActiveReport CrystalReport ReportNet(IBM)
【ネットワーク関連】
CCNP シスコ技術者認定
Cisco Catalyst シリーズ
Yamaha RTXシリーズ
FireWall関連
【WEB関連】
SEO SEM CSS IIS6/7 apache2

休みの日は卓球をやっています。
現在、卓球用品通販ショップは休業中です。