VastbaseE100

基于开源技术的HTAP数据库管理系统。性能优异,稳定可靠,提供诸多专属领域特性。

Menu

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参数

返回值:无。

mail

该接口功能为指定发件人。参数说明如下表所示:

参数名 必填 说明 类型 备注
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测试');