利用 UTL_TCP 程序包基于 TCP 协议发送邮件。这种方法比较原始,需要用户编写基础交换代码。
利用 UTL_SMTP 程序包基于 SMTP 协议发送邮件。这种方法比编码 TCP 操作简单很多,支持发送电子邮件的各种操作,因此使用非常广泛。
利用 UTL_MAIL 程序包发送邮件。这种方法最简单,支持常用的邮件功能,不需要了解 SMTP 协议。
如果觉得文章有用,欢迎关注❤️、点赞👍、推荐🎁
sqlplus sys/<pwd>
SQL> @$ORACLE_HOME/rdbms/admin/utlmail.sql
SQL> @$ORACLE_HOME/rdbms/admin/prvtmail.plb
sqlplus sys/<pwd>
SQL> ALTER SYSTEM SET smtp_out_server='smtp.domain.com' SCOPE=SPFILE;
UTL_MAIL.SEND (
sender IN VARCHAR2 CHARACTER SET ANY_CS,
recipients IN VARCHAR2 CHARACTER SET ANY_CS,
cc IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
bcc IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
subject IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
message IN VARCHAR2 CHARACTER SET ANY_CS,
mime_type IN VARCHAR2 DEFAULT 'text/plain; charset=us-ascii',
priority IN PLS_INTEGER DEFAULT 3,
replyto IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL);
SENDER:发送者的邮件地址
RECIPIENTS:接收者的邮件地址,多个地址使用逗号分隔
CC:抄送者的邮件地址,多个地址使用逗号分隔,默认为 NULL
BCC:密送者的邮件地址,多个地址使用逗号分隔,默认为 NULL
SUBJECT:邮件主题,默认为 NULL
MESSAGE:邮件正文
MIME_TYPE:邮件的 MIME 类型,默认为 text/plain; charset=us-ascii
PRIORITY:邮件优先级,1 级最高,5 级最低,默认为 3
REPLYTO:回复邮件发送的目标地址,Oracle 11g R2 开始支持该参数
BEGIN
UTL_MAIL.send(sender => 'myname@domain.com',
recipients => 'zhangsan@domain.com,lisi@domain.com',
cc => 'wangwu@domain.com',
bcc => 'myboss@domain.com',
subject => 'UTL_MAIL 测试',
message => '邮件正文',
mime_type => 'text/plain; charset=UTF-8'); -- 支持中文
END;
/
UTL_MAIL.SEND_ATTACH_RAW (
sender IN VARCHAR2 CHARACTER SET ANY_CS,
recipients IN VARCHAR2 CHARACTER SET ANY_CS,
cc IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
bcc IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
subject IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
message IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
mime_type IN VARCHAR2 DEFAULT CHARACTER SET ANY_CS
DEFAULT 'text/plain; charset=us-ascii',
priority IN PLS_INTEGER DEFAULT 3,
attachment IN RAW,
att_inline IN BOOLEAN DEFAULT TRUE,
att_mime_type IN VARCHAR2 CHARACTER SET ANY_CS
DEFAULT 'text/plain; charset=us-ascii',
att_filename IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
replyto IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL);
UTL_MAIL.SEND_ATTACH_VARCHAR2 (
sender IN VARCHAR2 CHARACTER SET ANY_CS,
recipients IN VARCHAR2 CHARACTER SET ANY_CS,
cc IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
bcc IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
subject IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
message IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
mime_type IN VARCHAR2 CHARACTER SET ANY_CS
DEFAULT 'text/plain; charset=us-ascii',
priority IN PLS_INTEGER DEFAULT 3,
attachment IN VARCHAR2 CHARACTER SET ANY_CS, ,
att_inline IN BOOLEAN DEFAULT TRUE,
att_mime_type IN VARCHAR2 CHARACTER SET ANY_CS
DEFAULT 'text/plain; charset=us-ascii',
att_filename IN VARCHAR2CHARACTER SET ANY_CS DEFAULT NULL,
replyto IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL);
ATTACHMENT:附件内容,数据类型为 RAW 或者 VARCHAR2
ATT_INLINE:指定附件是否在邮件正文中显示,默认为 TRUE
ATT_MIME_TYPE:附件的 MIME 类型,默认为 ‘application/octet’ 或者 ‘text/plain; charset=us-ascii’
ATT_FILENAME:附件的文件名,默认为 NULL
BEGIN
UTL_MAIL.send(sender => 'myname@domain.com',
recipients => 'zhangsan@domain.com,lisi@domain.com',
cc => 'wangwu@domain.com',
bcc => 'myboss@domain.com',
subject => 'UTL_MAIL 测试',
message => '邮件正文',
mime_type => 'text/plain; charset=UTF-8', -- 支持中文
attachment => '附件内容',
att_mime_type => 'text/plain; charset=UTF-8', -- 支持中文
att_filename => '附件.txt');
END;
/
ORA-24247: network access denied by access control list (ACL)
BEGIN;
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => '',
ace => xs$ace_type(privilege_list => xs$name_list('smtp'),
principal_name => 'scott',
principal_type => xs_acl.ptype_db));
END;
/
原文作者:SQL编程思想;如有侵权,请联系管理员删除。