Amazon RDS for SQL Server でのデータベースメールの使用
データベースメールを使用して、SQL Server データベースインスタンスの Amazon RDS からユーザーに E メールメッセージを送信できます。メッセージには、ファイルとクエリ結果を含めることができます。データベースメールは、次のコンポーネントを含みます。
-
設定オブジェクトおよびセキュリティオブジェクト – これらのオブジェクトは 、プロファイルとアカウントを作成し、
msdb
データベースに保存されます。 -
メッセージングオブジェクト – これらのオブジェクトは、メッセージの送信に使用する sp_send_dbmail
ストアドプロシージャと、メッセージに関する情報を保持するデータ構造を含みます。それらは msdb
データベースに保存されます。 -
ログオブジェクトと監査オブジェクト – データベースメールは、
msdb
データベースと Microsoft Windows アプリケーションイベントログにログ情報を書き込みます。 -
データベースメール 実行可能ファイル –
DatabaseMail.exe
は、msdb
データベースのキューから読み取り、E メールメッセージを送信します。
RDS は、Web Edition、Standard Edition、および Enterprise Edition の SQL Server のすべてのバージョンで、データベースメールをサポートします。
制限事項
SQL Server DB インスタンスでのデータベースメールの使用には、次の制約事項が適用されます。
-
データベースメールは、SQL Server Express Edition ではサポートされていません。
-
データベースメールの設定パラメータの変更はサポートされていません。プリセット (デフォルト) の値を表示するには、sysmail_help_configure_sp
ストアドプロシージャを使用します。 -
添付ファイルは、完全にはサポートされていません。詳細については、「添付ファイルの使用」を参照してください。
-
添付ファイルの最大サイズは 1 MB です。
-
データベースメールは、マルチ AZ DB インスタンスで追加の設定が必要です。詳細については、「マルチ AZ 配置に関する考慮事項」を参照してください。
-
定義済み演算子に E メールメッセージを送信する SQL Server エージェントの設定はサポートされていません。
データベースメールの有効化
DB インスタンスでデータベースメールを有効にするには、次の手順に従います。
-
新しいパラメータグループを作成します。
-
パラメータグループを変更して、
database mail xps
パラメータを 1 に設定します。 -
パラメータグループを DB インスタンスに関連付けます。
データベースメールパラメータグループの作成
DB インスタンスの SQL Server のエディションとバージョンに対応する database mail xps
パラメータのパラメータグループを作成します。
注記
既存のパラメータグループを変更することもできます。「データベースメールを有効にするパラメータの変更」 の手順に従います。
次の例では、SQL Server Standard Edition 2016 のパラメータグループを作成します。
パラメータグループを作成するには
AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/
) を開きます。 -
ナビゲーションペインで、[パラメータグループ] を選択します。
-
[Create parameter group] (パラメータグループの作成) を選択します。
-
[パラメータグループの作成] ペインで、次の操作を行います。
-
[パラメータグループファミリー] で、[sqlserver-se-13.0] を選択します。
-
[グループ名] に、パラメータグループの識別子 (
dbmail-sqlserver-se-13
など) を入力します。 -
[説明] に「
Database Mail XPs
」と入力します。
-
-
[Create] (作成) を選択します。
次の例では、SQL Server Standard Edition 2016 のパラメータグループを作成します。
パラメータグループを作成するには
-
以下のいずれかのコマンドを使用します。
Linux、macOS、Unix の場合:
aws rds create-db-parameter-group \ --db-parameter-group-name
dbmail-sqlserver-se-13
\ --db-parameter-group-family "sqlserver-se-13.0
" \ --description "Database Mail XPs
"Windows の場合:
aws rds create-db-parameter-group ^ --db-parameter-group-name
dbmail-sqlserver-se-13
^ --db-parameter-group-family "sqlserver-se-13.0
" ^ --description "Database Mail XPs
"
データベースメールを有効にするパラメータの変更
DB インスタンスの SQL Server のエディションとバージョンに対応するパラメータグループの database mail xps
パラメータを変更します。
データベースメールを有効にするには、database mail xps
パラメータを 1 に設定します。
次の例では、SQL Server Standard Edition 2016 用に作成したパラメータグループを変更します。
パラメータグループを変更するには
AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/
) を開きます。 -
ナビゲーションペインで、[パラメータグループ] を選択します。
-
[dbmail-sqlserver-se-13] などのパラメータグループを選択します。
-
[パラメータ] で、パラメータのリストを
mail
でフィルタ処理します。 -
[データベースメール xps] を選択します。
-
[Edit parameters] を選択します。
-
1
と入力します。 -
[Save changes] (変更の保存) をクリックします。
次の例では、SQL Server Standard Edition 2016 用に作成したパラメータグループを変更します。
パラメータグループを変更するには
-
以下のいずれかのコマンドを使用します。
Linux、macOS、Unix の場合:
aws rds modify-db-parameter-group \ --db-parameter-group-name
dbmail-sqlserver-se-13
\ --parameters "ParameterName='database mail xps',ParameterValue=1
,ApplyMethod=immediate"Windows の場合:
aws rds modify-db-parameter-group ^ --db-parameter-group-name
dbmail-sqlserver-se-13
^ --parameters "ParameterName='database mail xps',ParameterValue=1
,ApplyMethod=immediate"
パラメータグループと DB インスタンスの関連付け
AWS Management Console または AWS CLI を使用して、データベースメールパラメータグループを DB インスタンスに関連付けることができます。
データベースメールパラメータグループを新規または既存の DB インスタンスに関連付けることができます。
-
新しい DB インスタンスの場合は、インスタンスを起動するときにそれを関連付けます。詳細については、「Amazon RDS DB インスタンスの作成」を参照してください。
-
既存の DB インスタンスの場合は、インスタンスを変更することでそれを関連付けます。詳しくは、「Amazon RDS DB インスタンスを変更する」を参照してください。
データベースメールパラメータグループを新規または既存の DB インスタンスに関連付けることができます。
データベースメールパラメータグループを使用して DB インスタンスを作成するには
-
パラメータグループの作成時に使用したものと同じ DB エンジンのタイプとメジャーバージョンを指定します。
Linux、macOS、Unix の場合:
aws rds create-db-instance \ --db-instance-identifier
mydbinstance
\ --db-instance-classdb.m5.2xlarge
\ --enginesqlserver-se
\ --engine-version13.00.5426.0.v1
\ --allocated-storage100
\ --manage-master-user-password \ --master-usernameadmin
\ --storage-typegp2
\ --license-modelli
--db-parameter-group-namedbmail-sqlserver-se-13
Windows の場合:
aws rds create-db-instance ^ --db-instance-identifier
mydbinstance
^ --db-instance-classdb.m5.2xlarge
^ --enginesqlserver-se
^ --engine-version13.00.5426.0.v1
^ --allocated-storage100
^ --manage-master-user-password ^ --master-usernameadmin
^ --storage-typegp2
^ --license-modelli
^ --db-parameter-group-namedbmail-sqlserver-se-13
DB インスタンスを変更し、データベースメールパラメータグループを関連付けるには
-
以下のいずれかのコマンドを使用します。
Linux、macOS、Unix の場合:
aws rds modify-db-instance \ --db-instance-identifier
mydbinstance
\ --db-parameter-group-namedbmail-sqlserver-se-13
\ --apply-immediatelyWindows の場合:
aws rds modify-db-instance ^ --db-instance-identifier
mydbinstance
^ --db-parameter-group-namedbmail-sqlserver-se-13
^ --apply-immediately
データベースメールの設定
データベースメールを設定するには、次のタスクを実行します。
データベースメールプロファイルを作成します。
データベースメールアカウントを作成します。
データベースメールアカウントをデータベースメールプロファイルに追加します。
データベースメールプロファイルにユーザーを追加します。
注記
データベースメールを設定するには、execute
データベースのストアドプロシージャに msdb
アクセス権限があることを確認します。
データベースメールプロファイルの作成
データベースメールプロファイルを作成するには、sysmail_add_profile_spNotifications
という名前のプロファイルを作成します。
プロファイルを作成するには
-
次の SQL 文を使用します。
USE msdb GO EXECUTE msdb.dbo.sysmail_add_profile_sp @profile_name = 'Notifications', @description = 'Profile used for sending outgoing notifications using Amazon SES.'; GO
データベースメールアカウントの作成
データベースメールアカウントを作成するには、sysmail_add_account_spSES
という名前のアカウントを作成します。
Amazon SES を使用するには、以下のパラメータが必要です。
-
@email_address
– Amazon SES 検証済みの アイデンティティ。詳細については、Verified identities in Amazon SES を参照してください。 -
@mailserver_name
– Amazon SES SMTP エンドポイント。詳細については、Amazon SES SMTP エンドポイントへの接続を参照してください。 -
@username
– Amazon SES SMTP ユーザー名。詳細については、Amazon SES SMTP 認証情報の取得を参照してください。AWS Identity and Access Management ユーザー名を使用しないでください。
-
@password
– Amazon SES SMTP パスワード。詳細については、Amazon SES SMTP 認証情報の取得を参照してください。
アカウントを作成するには
-
次の SQL 文を使用します。
USE msdb GO EXECUTE msdb.dbo.sysmail_add_account_sp @account_name = 'SES', @description = 'Mail account for sending outgoing notifications.', @email_address = '
nobody@example.com
', @display_name = 'Automated Mailer', @mailserver_name = 'vpce-0a1b2c3d4e5f-01234567.email-smtp.us-west-2.vpce
.amazonaws.com', @port = 587, @enable_ssl = 1, @username = 'Smtp_Username
', @password = 'Smtp_Password
'; GO注記
セキュリティのベストプラクティスとして、ここに表示されているプロンプト以外の認証情報を指定してください。
データベースメールアカウントのデータベースメールプロファイルへの追加
データベースメールアカウントをデータベースメールプロファイルに追加するには、sysmail_add_profileaccount_spSES
アカウントを Notifications
プロファイルに追加します。
プロファイルにアカウントを追加するには
-
次の SQL 文を使用します。
USE msdb GO EXECUTE msdb.dbo.sysmail_add_profileaccount_sp @profile_name = 'Notifications', @account_name = 'SES', @sequence_number = 1; GO
データベースメールプロファイルへのユーザーの追加
msdb
データベースプリンシパルにデータベースメールプロファイルを使用するアクセス権限を付与するには、sysmail_add_principalprofile_sp
次の例では、Notifications
プロファイルへのパブリックアクセスを許可します。
プロファイルにユーザーを追加するには
-
次の SQL 文を使用します。
USE msdb GO EXECUTE msdb.dbo.sysmail_add_principalprofile_sp @profile_name = 'Notifications', @principal_name = 'public', @is_default = 1; GO
データベースメールの Amazon RDS ストアドプロシージャと関数
Microsoft が提供するストアドプロシージャ
プロシージャ/関数 | 説明 |
---|---|
rds_fn_sysmail_allitems | 送信メッセージ (他のユーザーの送信メッセージを含む) を表示します。 |
rds_fn_sysmail_event_log | イベント (他のユーザーの送信メッセージのイベントを含む) を表示します。 |
rds_fn_sysmail_mailattachments | 添付ファイル (他のユーザーの送信メッセージの添付ファイルも含む) を表示します。 |
rds_sysmail_control | メールキュー (DatabaseMail.exe プロセス) を開始および停止します。 |
rds_sysmail_delete_mailitems_sp | すべてのユーザーが送信した E メールメッセージをデータベースメール内部テーブルから削除します。 |
データベースメールを使用した E メールメッセージの送信
データベースメールを使用して E メールメッセージを送信するには、sp_send_dbmail
使用方法
EXEC msdb.dbo.sp_send_dbmail @profile_name = '
profile_name
', @recipients = 'recipient1@example.com
[;recipient2
; ...recipientn
]', @subject = 'subject
', @body = 'message_body
', [@body_format = 'HTML'], [@file_attachments = 'file_path1
;file_path2
; ...file_pathn
'], [@query = 'SQL_query'
], [@attach_query_result_as_file =0|1
]';
以下のパラメータは必須です。
-
@profile_name
– メッセージの送信元となるデータベースメールプロファイル名 -
@recipients
– メッセージの送信先となるセミコロン区切りの E メールアドレスリスト -
@subject
– メッセージの件名 -
@body
– メッセージの本文 宣言された変数を本文として使用することもできます。
以下のパラメータはオプションです。
-
@body_format
– このパラメータは、HTML 形式で E メールを送信するため、宣言された変数と共に使用します。 -
@file_attachments
– セミコロン区切りのメッセージ添付ファイルリスト。ファイルパスは絶対パスである必要があります。 -
@query
– 実行する SQL クエリ クエリ結果は、ファイルで添付することも、メッセージの本文に含めることもできます。 -
@attach_query_result_as_file
– クエリ結果をファイルでアタッチするかどうか。[いいえ] の場合は 0、[はい] の場合は 1 に設定します。デフォルトは 0 です。
例
次の例は、E メールメッセージを送信する方法をデモンストレーションします。
例 単一の受信者へのメッセージの送信の
USE msdb GO EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'nobody@example.com', @subject = 'Automated DBMail message - 1', @body = 'Database Mail configuration was successful.'; GO
例 複数の受信者へのメッセージの送信の
USE msdb GO EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'recipient1@example.com;recipient2@example.com', @subject = 'Automated DBMail message - 2', @body = 'This is a message.'; GO
例 添付ファイルでの SQL クエリ結果の送信の
USE msdb GO EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'nobody@example.com', @subject = 'Test SQL query', @body = 'This is a SQL query test.', @query = 'SELECT * FROM abc.dbo.test', @attach_query_result_as_file = 1; GO
例 HTML 形式でのメッセージの送信の
USE msdb GO DECLARE @HTML_Body as NVARCHAR(500) = 'Hi, <h4> Heading </h4> </br> See the report. <b> Regards </b>'; EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'nobody@example.com', @subject = 'Test HTML message', @body = @HTML_Body, @body_format = 'HTML'; GO
例 データベースで特定のイベントが発生した時の、トリガーを使用したメッセージの送信の
USE AdventureWorks2017 GO IF OBJECT_ID ('Production.iProductNotification', 'TR') IS NOT NULL DROP TRIGGER Purchasing.iProductNotification GO CREATE TRIGGER iProductNotification ON Production.Product FOR INSERT AS DECLARE @ProductInformation nvarchar(255); SELECT @ProductInformation = 'A new product, ' + Name + ', is now available for $' + CAST(StandardCost AS nvarchar(20)) + '!' FROM INSERTED i; EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'nobody@example.com', @subject = 'New product information', @body = @ProductInformation; GO
メッセージ、ログ、添付ファイルの表示
RDS ストアドプロシージャを使用して、メッセージ、イベントログ、および添付ファイルを表示します。
すべての E メールメッセージを表示するには
-
次の SQL クエリを使用します。
SELECT * FROM msdb.dbo.rds_fn_sysmail_allitems(); --WHERE sent_status='sent' or 'failed' or 'unsent'
すべての E メールイベントログを表示するには
-
次の SQL クエリを使用します。
SELECT * FROM msdb.dbo.rds_fn_sysmail_event_log();
すべての E メールの添付ファイルを表示するには
-
次の SQL クエリを使用します。
SELECT * FROM msdb.dbo.rds_fn_sysmail_mailattachments();
メッセージの削除
rds_sysmail_delete_mailitems_sp
ストアドプロシージャを使用して、メッセージを削除します。
注記
RDS は、データベースメール履歴データのサイズが 1 GB に達すると、メールテーブル項目を自動的に削除します。保持期間は最短 24 時間です。
メールアイテムを長期間保持する場合、アーカイブできます。詳細については、Microsoft ドキュメントの「データベースメールメッセージとイベントログをアーカイブする SQL Server Agent ジョブの作成
E メールメッセージをすべて削除するには
-
次の SQL 文を使用します。
DECLARE @GETDATE datetime SET @GETDATE = GETDATE(); EXECUTE msdb.dbo.rds_sysmail_delete_mailitems_sp @sent_before = @GETDATE; GO
特定のステータスの E メールメッセージをすべて削除するには
-
失敗したメッセージをすべて削除するには、次の SQL ステートメントを使用します。
DECLARE @GETDATE datetime SET @GETDATE = GETDATE(); EXECUTE msdb.dbo.rds_sysmail_delete_mailitems_sp @sent_status = 'failed'; GO
メールキューの開始
rds_sysmail_control
ストアドプロシージャを使用して、データベースメールプロセスを開始します。
注記
データベースメールを有効にすると、メールキューが自動的に開始します。
メールキューを開始するには
-
次の SQL 文を使用します。
EXECUTE msdb.dbo.rds_sysmail_control start; GO
メールキューの停止
rds_sysmail_control
ストアドプロシージャを使用して、データベースメールプロセスを停止します。
メールキューを停止するには
-
次の SQL 文を使用します。
EXECUTE msdb.dbo.rds_sysmail_control stop; GO
添付ファイルの使用
SQL Server の RDS からのデータベースメールメッセージでは、次の添付ファイル拡張子をサポートしていません。.ade、.adp、.apk、.appx、.appxbundle、.bat、.bak、.cab、.chm、.cmd、.com、.cpl、.dll、.dmg、.exe、.hta、.inf1、.ins、.isp、.iso、.jar、.job、.js、.jse、.ldf、.lib、.lnk、.mde、.mdf、.msc、.msi、.msix、.msixbundle、.msp、.mst、.nsh、.pif、.ps、.ps1、.psc1、.reg、.rgs、.scr、.sct、.shb、.shs、.svg、.sys、.u3p、.vb、.vbe、.vbs、.vbscript、.vxd、.ws、wsc、.wsf、および.wsh
データベースメールは、現在のユーザーの Microsoft Windows セキュリティコンテキストを使用して、ファイルへのアクセスを制御します。SQL Server 認証でログインするユーザーは、@file_attachments
ストアドプロシージャでsp_send_dbmail
パラメータを使用してファイルをアタッチすることはできません。Windows では、リモートコンピュータから別のリモートコンピュータに、SQL Server が認証情報を提供することはできません。したがって、データベースメールは、SQL Server を実行しているコンピュータ以外のコンピュータからコマンドを実行すると、ネットワーク共有からファイルをアタッチすることはできません。
ただし、SQL Server Agent ジョブを使用して、ファイルをアタッチすることができます。SQL Server Agent の詳細については、Microsoft ドキュメントの「SQL Server エージェントの使用」および「SQL Server Agent
マルチ AZ 配置に関する考慮事項
マルチ AZ DB インスタンスでデータベースメールを設定しても、設定はセカンダリに自動的には反映されません。マルチ AZ インスタンスをシングル AZ インスタンスに変換し、データベースメールを設定した後に、DB インスタンスをマルチ AZ に戻すことをお勧めします。次に、プライマリノードとセカンダリノードの両方に、データベースメールの設定があります。
データベースメールを設定したマルチ AZ インスタンスからリードレプリカを作成すると、レプリカはその設定を継承しますが、SMTP サーバーのパスワードは継承しません。パスワードを使用して、データベースメールアカウントを更新します。
SMTP (ポート 25) 制限の削除
デフォルトでは、AWS は RDS for SQL Server DB インスタンスの SMTP (ポート 25) でのアウトバウンドトラフィックをブロックします。これは、Elastic Network Interface 所有者のポリシーに基づいてスパムを防ぐために行われます。必要に応じて、この制限を削除できます。詳細については、「Amazon EC2 インスタンスまたは Lambda 関数のポート 25 の制限を解除するにはどうすればよいですか?