fc2ブログ

記事一覧

ストアドプロシージャでメールを送信する方法 -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 に関する記事をご紹介しておりますのでご参考頂ければ幸いです。


関連記事

コメント

コメントの投稿

※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。

 入力されていないコメントには返信しませんのであらかじめご了承くださいませ。

※ニックネームでも良いので必ずご入力ください。

    

※必ずご入力ください。

    
    

※必ずご入力ください。

※技術的な質問には環境やエラーについて正確かつ詳細にお教えください。

・正確なエラーの内容

・Windowsのバージョン番号

・Visual Studioのバージョン

・機器の型番

・アプリやソフトのバージョン

    

カテゴリ別記事一覧

広告

プロフィール

石河 純


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

IT関連の知識はざっくりとこんな感じです。
【OS関連】
WindowsServer: 2012/2008R2/2003/2000/NT4
Windows: 10/8/7/XP/2000/me/NT4/98
Linux: CentOS RedHatLinux9
Mac: macOS Catalina 10.15 / Mojave 10.14 / High Sierra 10.13 / Sierra 10.12 / OSX Lion 10.7.5 / OSX Snow Leopard 10.6.8
【言語】
VB.net ASP.NET C#.net Java VBA
Xamarin.Forms
【データベース】
Oracle 10g/9i
SQLServer 2016/2008R2/2005/2000
SQLAnywhere 16/11/8
【BI/レポートツール】
Cognos ReportNet (IBM)
Microsoft PowerBI
ActiveReport (GrapeCity)
CrystalReport
【OCX関連】
GrapeCity InputMan SPREAD MultiRow GridView
【ネットワーク関連】
CCNP シスコ技術者認定
Cisco Catalyst シリーズ
Yamaha RTXシリーズ
FireWall関連
【WEB関連】
SEO SEM CSS jQuery IIS6/7 apache2

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