

# Oracle UTL\$1MAIL
<a name="Oracle.Options.UTLMAIL"></a>

Amazon RDS 通过使用 UTL\$1MAIL 选项和 SMTP 服务器支持 Oracle UTL\$1MAIL。您可以通过使用 UTL\$1MAIL 包直接从您的数据库发送电子邮件。Amazon RDS 支持适用于以下版本 Oracle 的 UTL\$1MAIL：
+ Oracle Database 21c (21.0.0.0)，所有版本
+ Oracle Database 19c (19.0.0.0)，所有版本

以下是使用 UTL\$1MAIL 的一些限制：
+ UTL\$1MAIL 不支持传输层安全性 (TLS)，因此，不会对电子邮件进行加密。

  要通过创建和上传自定义 Oracle wallet 来安全地连接到远程 SSL/TLS 资源，请按照 [使用证书和 Oracle Wallet 配置 UTL\$1HTTP 访问](Oracle.Concepts.ONA.md) 中的说明操作。

  Wallet 所需的具体证书因服务而异。对于 AWS 服务，通常可在 [Amazon Trust Services 存储库](https://www.amazontrust.com/repository/)中了解到相关信息。
+ UTL\$1MAIL 不支持对 SMTP 服务器进行身份验证。
+ 您在一封电子邮件中只能发送一个附件。
+ 您无法发送 32 K 以上的附件。
+ 您只能使用 ASCII 和广义二进制编码的十进制交换码 (EBCDIC) 字符编码。
+ SMTP 端口 (25) 根据弹性网络接口所有者的策略进行限制。

当您启用 UTL\$1MAIL 时，仅向数据库实例的主用户授予执行权限。如果需要，主用户可向其他用户授予执行权限，以便他们能够使用 UTL\$1MAIL。

**重要**  
建议您启用 Oracle 的内置审核功能以跟踪 UTL\$1MAIL 过程的使用情况。

## Oracle UTL\$1MAIL 的先决条件
<a name="Oracle.Options.UTLMAIL.PreReqs"></a>

以下是使用 Oracle UTL\$1MAIL 的先决条件：
+ 一个或多个 SMTP 服务器，及对应的 IP 地址或公有或私有域名服务器 (DNS) 名称。有关通过自定义 DNS 服务器解析的私有 DNS 名称的详细信息，请参阅 [设置自定义 DNS 服务器](Appendix.Oracle.CommonDBATasks.System.md#Appendix.Oracle.CommonDBATasks.CustomDNS)。

## 添加“Oracle UTL\$1MAIL”选项
<a name="Oracle.Options.UTLMAIL.Add"></a>

将“Oracle UTL\$1MAIL”选项添加到数据库实例的一般过程如下所示：

1. 创建新的选项组，或者复制或修改现有选项组。

1. 将 选项添加到该选项组。

1. 将选项组与数据库实例相关联。

在添加“UTL\$1MAIL”选项后，一旦激活该选项组，就会激活 UTL\$1MAIL。

**将“UTL\$1MAIL”选项添加到数据库实例**

1. 确定您想要使用的选项组。您可以创建新的选项组，或使用现有选项组。如果您想使用现有选项组，请跳到下一步。或者，通过以下设置创建自定义数据库选项组：

   1. 对于**引擎**，请选择要使用的 Oracle 版本。

   1. 对于**主引擎版本**，选择数据库实例的版本。

   有关更多信息，请参阅“[创建选项组](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)”。

1. 将 **UTL\$1MAIL** 选项添加到该选项组。有关添加选项的更多信息，请参阅 [将选项添加到选项组](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)。

1. 将选项组应用到新的或现有的数据库实例：
   + 对于新数据库实例，您可以在启动实例时应用选项组。有关更多信息，请参阅“[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)”。
   + 对于现有数据库实例，您可以通过修改实例并附加新的选项组来应用选项组。有关更多信息，请参阅“[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)”。

## 使用 Oracle UTL\$1MAIL
<a name="Oracle.Options.UTLMAIL.Using"></a>

在启用“UTL\$1MAIL”选项后，您必须先配置 SMTP 服务器，然后才能开始使用它。

通过将 SMTP\$1OUT\$1SERVER 参数设置为有效的 IP 地址或公有 DNS 名称来配置 SMTP 服务器。对于 SMTP\$1OUT\$1SERVER 参数，您可以指定多个服务器的地址的逗号分隔的列表。如果第一个服务器不可用，则 UTL\$1MAIL 会尝试下一个服务器，依此类推。

您可以通过使用[数据库参数组](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html)设置数据库实例的默认 SMTP\$1OUT\$1SERVER。您可以通过在数据库实例的数据库上运行以下代码来设置会话的 SMTP\$1OUT\$1SERVER 参数。

```
1. ALTER SESSION SET smtp_out_server = mailserver.domain.com:25;
```

在启用“UTL\$1MAIL”选项并配置 SMTP\$1OUT\$1SERVER 后，您可以通过使用 `SEND` 过程来发送邮件。有关更多信息，请参阅 Oracle 文档中的 [UTL\$1MAIL](http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/u_mail.htm#BABFJJBD)。

## 删除“Oracle UTL\$1MAIL”选项
<a name="Oracle.Options.UTLMAIL.Remove"></a>

您可以从数据库实例中删除“Oracle UTL\$1MAIL”。

要从数据库实例中删除“UTL\$1MAIL”，请执行下列操作之一：
+ 要从多个数据库实例中删除“UTL\$1MAIL”，请从其所属的选项组中删除“UTL\$1MAIL”选项。此更改会影响使用该选项组的所有数据库实例。有关更多信息，请参阅“[从选项组中删除选项](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.RemoveOption)”。
+ 要从单个数据库实例中删除“UTL\$1MAIL”选项，请修改该数据库实例，并指定另一个不包含“UTL\$1MAIL”选项的选项组。您可以指定默认 (空) 选项组，或指定其他自定义选项组。有关更多信息，请参阅“[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)”。

## 故障排除
<a name="Oracle.Options.UTLMAIL.Troubleshooting"></a>

以下是您在将 UTL\$1MAIL 用于 Amazon RDS 时可能遇到的问题。
+ 限制。SMTP 端口 (25) 根据弹性网络接口所有者的策略进行限制。如果您可以使用 UTL\$1MAIL 成功发送电子邮件，并且看到错误 `ORA-29278: SMTP transient error: 421 Service not available`，则您可能被限制。如果您在发送电子邮件时遇到限制，我们建议您实施回退算法。有关回退算法的更多信息，请参阅 [AWS中的错误重试和指数回退](https://docs.aws.amazon.com/general/latest/gr/api-retries.html)以及[如何处理“throttling – Maximum sending rate exceeded”错误](https://aws.amazon.com/blogs/ses/how-to-handle-a-throttling-maximum-sending-rate-exceeded-error/)。

  您可以请求删除此限制。有关更多信息，请参阅[如何从 EC2 实例删除端口 25 上的限制？](https://aws.amazon.com/premiumsupport/knowledge-center/ec2-port-25-throttle/)。