Amazon Simple Email Service (Amazon SES) 機能を使用して E メールを送信したいと考えています。プライベートサブネットまたはパブリックサブネットでホストされている Amazon Relational Database Service (Amazon RDS) for SQL Server インスタンスを使用したいと考えています。
簡単な説明
Amazon RDS for SQL Server DB インスタンスを使用して Amazon SES で E メールを送信するには、まず Amazon SES を使用して簡易メール転送プロトコル (SMTP) 認証情報を作成します。その後、Database Mail で使用するパラメータグループを作成します。DB インスタンスがプライベートサブネットでホストされている場合は、Database Mail プロファイルで使用する VPC エンドポイントを設定します。
解決策
Amazon SES を設定する
1. Amazon SES コンソールを開き、[SMTP 設定] を選択します。
2. [サーバー名] と [ポート] に表示されている値を書き留めます。
3. [SMTP 認証情報の作成] を選択します。これにより、AWS Identity and Access Management (IAM) コンソールが開きます。
4. [IAM ユーザー名] で、ユーザーを入力するか、デフォルトのユーザーを使用して続行し、[作成] を選択します。
5. [認証情報をダウンロード] を選択します。SMTP 認証情報をダウンロードできるのはこのときだけなので、必ず安全な場所に保存してください。
6. Amazon SES コンソールを開き、[E メールアドレス] を選択します。
7. [新しい E メールアドレスを検証する] を選択し、確認メールを受信する E メールアドレスを入力します。
8. E メールアドレスを確認入力したら、[検証ステータス] が [検証済み] になっていることを確認します。
Database Mail パラメータグループを設定する
Database Mail プロファイルで使用するカスタムパラメータグループが既にある場合は、この手順をスキップしてください。
1. Amazon RDS コンソールを開き、ナビゲーションペインから [パラメータグループ] を選択します。
2. [パラメータグループを作成] を選択します。
3. [パラメータグループファミリー] で、使用している SQL Server のバージョンとエディションを選択します。たとえば、SQL Server 2016 Enterprise Edition は sqlserver-ee-13.0 を使用します。
4. [グループ名] と [説明] を入力してから、[作成] を選択します。
5. [パラメータグループ] ページで、作成したグループを選択します。
6. [パラメータを編集] を選択し、[database mail xps] の横にあるチェックボックスをオンにします。
7. [値] で [1] を選択します。
8. 変更を保存します。
注: パラメータグループが既に RDS for SQL Server インスタンスに関連付けられている場合は、次の手順をスキップしてください。
9. Amazon RDS コンソールで、[データベース] を選択し、[変更] を選択します。
10. [データベースオプション] で、以前に設定したパラメータを選択し、[続行] を選択します。
11. [変更のスケジューリング] で、[今すぐ] を選択します。
12. [DB インスタンスを変更] を選択して変更を適用し、インスタンスを再起動します。
Database Mail を設定する
RDS for SQL Server インスタンスがパブリックサブネットでホストされている場合は、「データベースメールの設定」の手順に従います。
ただし、インスタンスがプライベートサブネットにある場合は、Database Mail を設定したときに次のエラーが表示されることがあります。
「The mail could not be sent to the recipients because of the mail server failure. (Sending Mail using Account 1 (2020-12-08T22:20:51).Exception Message: Could not connect to mail server.(A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 52.63.118.124:587).」
このエラーは、DB インスタンスがメールサーバーにアクセスできないことを示しています。これを解決するには、Amazon SES 用に VPC エンドポイントを作成します。
1. インスタンスのプライベート IP を特定します。
2. インスタンスに関連付けられているセキュリティグループに対するインバウンドルールを含む新しいセキュリティグループを作成します**。** [タイプ] で、[カスタム TCP] を選択します。[ポート範囲] で、E メールの送信に使用するポート番号を入力します。25、465、587、2465、または 2587 を使用できます。[送信元タイプ] で [カスタム] を選択します。[ソース] で、RDS for SQL Server インスタンスのプライベート IP を入力します。
3. VPC エンドポイントを作成します。VPC エンドポイントが使用可能な状態になったら、エンドポイントを選択し、DNS フィールドの下にある最初のエントリをコピーします。
4. Database Mail アカウントを再作成します。
use msdb
go
EXECUTE msdb.dbo.sysmail_add_account_sp
@account_name = 'Acc1',
@description = 'Mail account for sending outgoing
notifications.',
@email_address = 'example@example.com',
@display_name = 'Automated Mailer',
@mailserver_name =
'vpce-0a9cxxxxxxxxxxxxx-xxxxxxxx.email-smtp.ap-southeast-2.vpce.amazonaws.com',
<---- VPC endpoint created in previous step
@port = 587,
@enable_ssl = 1,
@username = 'SMTP-username', <---- For user name and
password, please use the SES credentials
@password = 'SMTP-password' ;
注: @mailserver\ _name は VPC エンドポイントを作成したときに取得した DNS に置き換えます。
5. Database Mail を正しく設定していれば、この SQL コマンドを実行すると、E メールは正常に送信されます。
EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'success@simulator.amazonses.com',
@body = 'The database mail configuration was completed successfully.',
@subject = 'Automated Success Message';
6. 次に、以下のストアドプロシージャを実行して、すべての E メールアイテムを一覧表示して検証します。[sent_status] 列で、ステータスが送信されていることを確認します。
SELECT * FROM msdb.dbo.sysmail_allitems
関連情報
Amazon RDS Custom for SQL Server DB インスタンスの管理
Using Database Mail on Amazon RDS for SQL Server