

# 在 Amazon RDS for SQL Server 上使用数据库邮件
<a name="SQLServer.DBMail"></a>

您可以使用数据库邮件从 Amazon RDS on SQL Server 数据库实例向用户发送电子邮件。这些消息可以包含文件和查询结果。数据库邮件包括以下组件：
+ **配置和安全对象** – 这些对象可以创建配置文件和账户，并存储在 `msdb` 数据库中。
+ **消息收发对象** – 这些对象包括用于发送消息的 [sp\$1send\$1dbmail](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-send-dbmail-transact-sql) 存储过程以及保存有关消息信息的数据结构。相关内容均存储在 `msdb` 数据库中。
+ **日志记录和审计对象** – 数据库邮件将日志记录信息写入 `msdb` 数据库和 Microsoft Windows 应用程序事件日志中。
+ **数据库邮件可执行文件** – `DatabaseMail.exe` 读取 `msdb` 数据库中的队列并发送电子邮件。

RDS 在 Web 版、标准版和企业版上支持所有 SQL Server 版本的数据库邮件。

## 限制
<a name="SQLServer.DBMail.Limitations"></a>

以下限制适用于在 SQL Server 数据库实例上使用数据库邮件：
+ SQL Server 精简版不支持数据库邮件。
+ 不支持修改数据库邮件配置参数。如欲查看预设（默认）值，请使用 [sysmail\$1help\$1configure\$1sp](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-help-configure-sp-transact-sql) 存储过程。
+ 不完全支持文件附件。有关更多信息，请参阅“[使用文件附件](#SQLServer.DBMail.Files)”。
+ 文件附件的最大大小为 1 MB。
+ 数据库邮件需要对多可用区数据库实例进行额外配置 有关更多信息，请参阅“[多可用区部署的注意事项](#SQLServer.DBMail.MAZ)”。
+ 不支持将 SQL Server Agent 配置为向预定义运算符发送电子邮件。

## 数据库邮件的 Amazon RDS 存储过程和函数
<a name="SQLServer.DBMail.StoredProc"></a>

Microsoft 提供[存储过程](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/database-mail-stored-procedures-transact-sql)用于使用数据库邮件，例如创建、列出、更新和删除帐户和配置文件。此外，RDS 还提供了数据库邮件的存储过程和函数，如下表所示。


| 过程/功能 | 描述 | 
| --- | --- | 
| rds\$1fn\$1sysmail\$1allitems | 显示已发送的消息，包括其他用户提交的消息。 | 
| rds\$1fn\$1sysmail\$1event\$1log | 显示事件，包括其他用户提交的消息事件。 | 
| rds\$1fn\$1sysmail\$1mailattachments | 显示附件，包括其他用户提交的消息附件。 | 
| rds\$1sysmail\$1control | 启动和停止邮件队列（DatabaseMail.exe 进程）。 | 
| rds\$1sysmail\$1delete\$1mailitems\$1sp | 从数据库邮件内部表中删除所有用户发送的电子邮件。 | 

## 使用文件附件
<a name="SQLServer.DBMail.Files"></a>

在 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 Agent for Amazon RDS](Appendix.SQLServer.CommonDBATasks.Agent.md) 和 [SQL Server Agent](https://docs.microsoft.com/en-us/sql/ssms/agent/sql-server-agent)。

## 多可用区部署的注意事项
<a name="SQLServer.DBMail.MAZ"></a>

在多可用区数据库实例上配置数据库邮件时，配置不会自动传播到辅助节点。我们建议将多可用区实例转换为单可用区实例，配置数据库邮件，然后将数据库实例转换回多可用区实例。然后，主节点和辅助节点都具有数据库邮件配置。

如果您从配置了数据库邮件的多可用区实例中创建只读副本，则副本将继承配置，但不会向 SMTP 服务器提供密码。使用密码更新数据库邮件账户。

## 删除 SMTP（端口 25）限制
<a name="SQLServer.DBMail.SMTP"></a>

默认情况下，Amazon 会阻止 RDS for SQL Server 数据库实例的 SMTP（端口 25）上的出站流量。这样做是为了根据弹性网络接口所有者的策略来阻止垃圾邮件。如果需要，您可以删除此限制。有关更多信息，请参阅[如何删除 Amazon EC2 实例或 Lambda 函数的端口 25 的限制？](https://repost.aws/knowledge-center/ec2-port-25-throttle)。