当我的 RDS for SQL Server 实例位于公有或私有子网中时,如何使用 Amazon SES 功能发送电子邮件?

上次更新日期:2022 年 9 月 28 日

我想使用 Amazon Simple Email Service(Amazon SES)功能发送电子邮件。对于托管在私有或公有子网中的 SQL Server 实例,如何使用 Amazon Relational Database Service(Amazon RDS)来做到这一点?

简短描述

要使用 Amazon RDS for SQL Server 数据库实例通过 Amazon SES 发送电子邮件,请首先使用 Amazon SES 创建您的简单邮件协议传输(SMPT)凭证。然后,创建一个用于数据库邮件的参数组。如果您的数据库实例托管在私有子网中,请配置 VPC 端点以在您的数据库邮件配置文件中使用。

解决方法

设置 Amazon SES

1.    打开 Amazon SES 控制台,然后选择 SMTP settings(SMTP 设置)。

2.    记下列出的 Server name(服务器名称)和 Port(端口)的值。

3.    选择 Create SMTP credentials(创建 SMTP 凭证)。这将打开 AWS Identity and Access Management(IAM)控制台。

4.    对于 IAM User Name(IAM 用户名),输入用户或继续使用默认用户,然后选择 Create(创建)。

5.    选择 Download credentials(下载凭证)。这是您唯一一次可以下载 SMTP 凭证的机会,因此请务必将它们保存在安全的地方。

6.    打开 Amazon SES 控制台,然后选择 Email Addresses(电子邮件地址)。

7.    选择 Verify a new email address(验证新的电子邮件地址),然后输入要接收确认电子邮件的电子邮件地址。

8.    确认电子邮件地址后,确认您的 Verification status(验证状态)为 verified(已验证)。

设置数据库邮件参数组

如果您已经有一个用于数据库邮件配置文件的自定义参数组,请跳过此步骤。

1.    打开 Amazon RDS 控制台,然后从导航窗格中选择 Parameter groups(参数组)。

2.    选择 Create parameter group(创建参数组)。

3.    对于 Parameter group family(参数组系列),请选择 SQL Server 版本和您正在使用的版本。例如,SQL Server 2016 企业版本使用 sqlserver-ee-13.0

4.    输入 Group name(组名称)和 Description(描述),然后选择 Create(创建)。

5.    在 Parameter groups(参数组)页面上,选择您创建的组。

6.    选择 Edit parameters(编辑参数),然后选中 database mail xps(数据库邮件 xps)旁的复选框。

7.    对于 Values(值),选择 1

8.    保存所做更改。

注意:如果参数组已经与您的 RDS for SQL Server 实例相关联,请跳过这些步骤。

9.    在 Amazon RDS 控制台中,选择 Database(数据库),然后选择 Modify(修改)。

10.    在 Database options(数据库选项)下,选择您之前配置的参数,然后选择 Continue(继续)。

11.    在 Scheduling of modifications(修改计划)下,选择 Immediately(立即)。

12.    选择 Modify DB Instance(修改数据库实例)以应用更改,然后重启您的实例。

配置数据库邮件

如果您的 RDS for SQL Server 实例托管在公有子网中,请按照配置数据库邮件中的步骤操作。

但是,如果您的实例在私有子网中,则在配置数据库邮件时可能会看到以下错误:

“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).(由于邮件服务器故障,邮件无法发送给收件人。[使用账户 1 发送邮件(2020-12-08T22:20:51)]。异常消息:无法连接到邮件服务器。[连接尝试失败的原因是连接方在一段时间后没有正确响应,或者由于连接的主机未能响应 52.63.118.124:587 而建立的连接失败]。”

此错误表示您的数据库实例无法访问邮件服务器。要解决此问题,请为 Amazon SNS 创建一个 VPC 端点。

1.    识别您的实例的私有 IP

2.    使用与您的实例关联的安全组的入站规则创建一个新的安全组 对于 Type(类型),选择 Custom TCP(自定义 TCP)。对于 Port range(端口范围),输入要用于发送电子邮件的端口号。您可以使用 25、465、587、2465 或 2587。对于 Source type(源类型),选择 Custom(自定义)。对于 Source(源),输入您的 RDS for SQL Server 实例的私有 IP。

3.    创建 VPC 端点。在 VPC 端点处于可用状态后,选择端点,然后复制 DNS 字段下找到的第一个条目。

4.    重新创建数据库邮件账户:

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.    如果您正确配置了数据库邮件,则当您运行此 SQL 命令时,电子邮件将成功发送。

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.    接下来,运行此存储过程以列出并验证所有电子邮件项目。在 sent_status 列中,验证状态是否为已发送。

SELECT * FROM msdb.dbo.sysmail_allitems