UTL_SMTP包使用说明
接口说明
本例的参数说明以微信企业邮箱为例。
open_connection
该接口功能为定义smtp服务器。参数说明如下表所示:
参数名 | 必填 | 说明 | 类型 | 备注 |
host | 是 | smtp服务器地址 | varchar | |
port | 否 | smtp服务器端口号 | integer | 默认为25 |
tx_timeout | 否 | utl_smtp包在此链接读取或写入的超时时间(以秒为单位) | integer | 默认为NULL,NULL表示永远等待 |
secure_connection_ before_smtp |
否 | 如果为“true”,则在SMTP通信之前使用SSL / TLS建立安全连接。如果为“false”,则未建立连接 | varchar | 默认为“false” |
返回值:connection 为varchar类型。
说明:微信企业邮箱的host取值为smtp.exmail.qq.com;port取值为25;secure_connection_before_smtp参数取值为”true”。
auth
该接口功能为进行身份验证。参数说明如下表所示:
参数名 | 必填 | 说明 | 类型 | 备注 |
c | 是 | open_connection返回值 | varchar | |
username | 是 | 登录用户名 | varchar | |
password | 是 | 登录密码/密钥 | varchar | |
schemas | 否 | 用户名和密码的加密方式 | varchar | 默认CRAM_MD5 |
说明:接口open_connection的secure_connection_before_smtp参数取值有:
NON_CLEARTEXT_PASSWORD_SCHEMES:'CRAM-MD5'
ALL_SCHEMES:'CRAM-MD5 PLAIN LOGIN'
微信企业邮箱的password参数取值为邮箱密码;schemas参数取值为CRAM-MD5 PLAIN LOGIN。
helo
该接口功能为识别服务器地址。参数说明如下表所示:
参数名 | 必填 | 说明 | 类型 | 备注 |
c | 是 | open_connection返回值 | varchar | |
domain | 是 | 发送邮箱的smtp服务器地址 | varchar | open_connection的host参数 |
返回值:无。
该接口功能为指定发件人。参数说明如下表所示:
参数名 | 必填 | 说明 | 类型 | 备注 |
c | 是 | open_connection返回值 | varchar | |
sender | 是 | 发件人邮箱地址 | varchar |
返回值:无。
rcpt
该接口功能为指定收件人。参数说明如下表所示:
参数名 | 必填 | 说明 | 类型 | 备注 |
c | 是 | open_connection返回值 | varchar | |
recipient | 是 | 收件人邮箱地址 | varchar |
返回值:无。
open_data
该接口功能为启动邮件正文,无返回值。参数说明如下表所示:
参数名 | 必填 | 说明 | 类型 | 备注 |
c | 是 | open_connection返回值 | varchar |
返回值:无。
write_data
该接口功能为编写邮件正文(可多次调用)。参数说明如下表所示:
参数名 | 必填 | 说明 | 类型 | 备注 |
c | 是 | open_connection返回值 | varchar | |
data | 是 | 消息文本 | varchar |
返回值:无。
注意参数data(消息文本)有格式要求,参照使用示例。
close_data
该接口功能为发送邮件正文并关闭邮件。参数说明如下表所示:
参数名 | 必填 | 说明 | 类型 | 备注 |
c | 是 | open_connection返回值 | varchar |
返回值:邮件发送返回信息。
quit
该接口功能为断开smtp链接。参数说明如下表所示:
参数名 | 必填 | 说明 | 类型 | 备注 |
c | 是 | open_connection返回值 | varchar |
返回值:无。
使用示例
CREATE OR REPLACE FUNCTION send_mail(recipient varchar, subject varchar, message varchar) returns void as
$$
declare
v_mailhost varchar := 'smtp.exmail.qq.com';
v_sender varchar := 'xxxxx@vastdata.com.cn';
v_passwd varchar := 'Aa123456';
v_conn varchar := '';
v_msg varchar;
crlf varchar(2) := CHR(10);
v_ret varchar;
begin
v_conn := utl_smtp.open_connection(v_mailhost, 25, 1000, 'true');
perform utl_smtp.auth(v_conn, v_sender, v_passwd, 'CRAM-MD5 PLAIN LOGIN');
perform utl_smtp.helo(v_conn, v_mailhost);
perform utl_smtp.mail(v_conn, v_sender);
perform utl_smtp.rcpt(v_conn, recipient);
v_msg := 'From: ' || v_sender || crlf ||
'To: ' || recipient || crlf ||
'Subject: ' || subject || crlf ||
crlf || message;
raise notice '%', v_msg;
perform utl_smtp.open_data(v_conn);
perform utl_smtp.write_data(v_conn, v_msg);
v_ret := utl_smtp.close_data(v_conn);
raise notice 'retcode:%', v_ret;
perform utl_smtp.quit(v_conn);
end;
$$ LANGUAGE plpgsql;
select send_mail('xxxxxxxxxx@qq.com', '测试', 'Oracle兼容包utl_smtp测试');