---
title: "UTL_SMTP 概述 - OceanBase 数据库 V4.2.5 | OceanBase 文档中心"
description: UTL_SMTP 概述 UTL_SMTP 是用于通过 SMTP（简单邮件传输协议）发送电子邮件的系统包。 UTL_SMTP 依赖于 UTL_TCP 系统包，需要保证 UTL_TCP 系统包有效。 功能适用性 该内容仅适用于 OceanBase 数据库 Oracle 模式。 UTL_SMTP 子程序概览 下表列出了 O…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.2.5 LTS

# UTL_SMTP 概述

更新时间：2026-07-14 20:36:56

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.2.5/zh-CN/700.reference/500.sql-reference/300.pl-reference/300.pl-oracle/1400.pl-system-package-oracle/27200.utl-smtp-oracle/100.utl-smtp-overview-oracle.md)  

`UTL_SMTP` 是用于通过 SMTP（简单邮件传输协议）发送电子邮件的系统包。

`UTL_SMTP` 依赖于 `UTL_TCP` 系统包，需要保证 `UTL_TCP` 系统包有效。

#### 功能适用性

该内容仅适用于 OceanBase 数据库 Oracle 模式。

## UTL_SMTP 子程序概览

下表列出了 OceanBase 数据库当前版本所支持的 `UTL_SMTP` 子程序以及简要描述。

| **子程序** | **描述** |
| --- | --- |
| [OPEN_CONNECTION](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001809533) | 用于打开并返回一个与 SMTP 服务的连接。 |
| [CLOSE_CONNECTION](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001809535) | 关闭 SMTP 连接，从而导致 SMTP 操作终止，仅用于在 data session 过程中取消电子邮件。 |
| [QUIT](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001809536) | 向服务器发送 `QUIT` 命令，终止 SMTP 会话，并断开与服务器的连接。 |
| [AUTH](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001809537) | 向 SMTP 服务器发送身份验证的命令。 |
| [COMMAND](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001809538) | 用于执行通用的 SMTP 命令。 |
| [COMMAND_REPLIES](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001809539) | 用于执行通用的 SMTP 命令，接收多个回复行。 |
| [HELO](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001809540) | 用于执行 `HELO` 命令，与 SMTP 服务进行初始握手。 |
| [EHLO](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001809541) | 用于执行 `EHLO` 命令，与 SMTP 服务进行初始握手。 |
| [MAIL](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001809523) | 用于执行 `MAIL` 命令，与 SMTP 服务启动邮件事务，声明发件人邮箱。 |
| [RCPT](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001809524) | 用于执行 `RCPT` 命令，指定电子邮件收件人。 |
| [OPEN_DATA](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001809525) | 用于发送 `DATA` 命令，向服务器说明开始发送邮件内容，后续通过 `write_data` 和 `write_raw_data` 编写邮件内容。 |
| [WRITE_DATA](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001809526) | 用于发送文本邮件内容，可以多次调用将数据追加到电子邮件中。 |
| [WRITE_RAW_DATA](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001809527) | 用于发送 raw 数据邮件内容，可以多次调用将数据追加到电子邮件中。 |
| [CLOSE_DATA](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001809528) | 用于发送一个 `<CR><LF>.<CR><LF>` 标识邮件文本发送完成。 |
| [DATA](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001809529) | 用于指定电子邮件正文。 |
| [VRFY](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001809530) | 发送 `VRFY` 命令，用于验证目标电子邮件地址的有效性。 |
| [HELP](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001809531) | 发送 `HELP` 命令，获取帮助信息。 |
| [NOOP](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001809532) | 发送 `NOOP` 命令，用于验证目标电子邮件地址的有效性。 |
| [RSET](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001809534) | 发送 `RSET` 命令，用于终止当前电子邮件事务。 |

## 使用示例

```sql
DECLARE
  -- 定义邮件服务器信息
  l_mailhost VARCHAR2(100) := 'smtp.example.com';  -- SMTP服务器地址
  l_mail_conn UTL_SMTP.connection;                 -- 连接对象

  -- 邮件内容
  l_from VARCHAR2(100) := 'sender@example.com';    -- 发件人邮箱
  l_to VARCHAR2(100) := 'receiver@example.com';    -- 收件人邮箱
  l_subject VARCHAR2(100) := '测试邮件';            -- 邮件主题
  l_message VARCHAR2(4000) := '这是一封来自 OceanBase 数据库的测试邮件。';  -- 邮件正文
BEGIN
  -- 开始连接到SMTP服务器
  l_mail_conn := UTL_SMTP.open_connection(l_mailhost, 25);  -- 25是SMTP服务的标准端口

  -- 向服务器发送HELO命令
  UTL_SMTP.helo(l_mail_conn, l_mailhost);

  -- 设置邮件的发件人
  UTL_SMTP.mail(l_mail_conn, l_from);

  -- 设置邮件的收件人
  UTL_SMTP.rcpt(l_mail_conn, l_to);

  -- 开始数据传输
  UTL_SMTP.open_data(l_mail_conn);

  -- 添加邮件头部信息
  UTL_SMTP.write_data(l_mail_conn, 'From: ' || l_from || UTL_TCP.crlf);
  UTL_SMTP.write_data(l_mail_conn, 'To: ' || l_to || UTL_TCP.crlf);
  UTL_SMTP.write_data(l_mail_conn, 'Subject: ' || l_subject || UTL_TCP.crlf);
  UTL_SMTP.write_data(l_mail_conn, UTL_TCP.crlf);  -- 空行分隔头和体

  -- 写入邮件正文
  UTL_SMTP.write_data(l_mail_conn, l_message || UTL_TCP.crlf);

  -- 结束数据传输
  UTL_SMTP.close_data(l_mail_conn);

  -- 关闭连接
  UTL_SMTP.quit(l_mail_conn);

  DBMS_OUTPUT.PUT_LINE('邮件发送成功！');
EXCEPTION
  WHEN OTHERS THEN
    -- 如果发生错误，尝试关闭连接（如果已打开）
    IF UTL_SMTP.is_open(l_mail_conn) THEN
      UTL_SMTP.quit(l_mail_conn);
    END IF;

    -- 显示异常信息
    RAISE;
END;
/

```

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
