在 Amazon RDS for SQL Server 上使用数据库邮件
您可以使用数据库邮件从 Amazon RDS on SQL Server 数据库实例向用户发送电子邮件。这些消息可以包含文件和查询结果。数据库邮件包括以下组件:
-
配置和安全对象 – 这些对象可以创建配置文件和账户,并存储在
msdb
数据库中。 -
消息收发对象 – 这些对象包括用于发送消息的 sp_send_dbmail
存储过程以及保存有关消息信息的数据结构。相关内容均存储在 msdb
数据库中。 -
日志记录和审计对象 – 数据库邮件将日志记录信息写入
msdb
数据库和 Microsoft Windows 应用程序事件日志中。 -
数据库邮件可执行文件 –
DatabaseMail.exe
读取msdb
数据库中的队列并发送电子邮件。
RDS 在 Web 版、标准版和企业版上支持所有 SQL Server 版本的数据库邮件。
限制
以下限制适用于在 SQL Server 数据库实例上使用数据库邮件:
-
SQL Server 精简版不支持数据库邮件。
-
不支持修改数据库邮件配置参数。如欲查看预设(默认)值,请使用 sysmail_help_configure_sp
存储过程。 -
不完全支持文件附件。有关更多信息,请参阅“使用文件附件”。
-
文件附件的最大大小为 1 MB。
-
数据库邮件需要对多可用区数据库实例进行额外配置 有关更多信息,请参阅“多可用区部署的注意事项”。
-
不支持将 SQL Server Agent 配置为向预定义运算符发送电子邮件。
数据库邮件的 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 | 从数据库邮件内部表中删除所有用户发送的电子邮件。 |
使用文件附件
在 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 和 SQL Server Agent
多可用区部署的注意事项
在多可用区数据库实例上配置数据库邮件时,配置不会自动传播到辅助节点。我们建议将多可用区实例转换为单可用区实例,配置数据库邮件,然后将数据库实例转换回多可用区实例。然后,主节点和辅助节点都具有数据库邮件配置。
如果您从配置了数据库邮件的多可用区实例中创建只读副本,则副本将继承配置,但不会向 SMTP 服务器提供密码。使用密码更新数据库邮件账户。
删除 SMTP(端口 25)限制
默认情况下,Amazon 会阻止 RDS for SQL Server 数据库实例的 SMTP(端口 25)上的出站流量。这样做是为了根据弹性网络接口所有者的策略来阻止垃圾邮件。如果需要,您可以删除此限制。有关更多信息,请参阅如何删除 Amazon EC2 实例或 Lambda 函数的端口 25 的限制?