oracle10g发送email示例
/*设置日期*/
write_data(l_conn, 'Content-Type', multipart_mime_type);
p_name in varchar2,
utl_smtp.quit(l_conn);
l_sendoraddress := '<' || p_sendor || '>';
begin
p_sub为邮件标题,p_txt为邮件内容(支持HTML)。代码如下: l_str varchar2(4000);
is
p_crlf varchar2 default l_crlf) is
在Procedure中p_receiver为收件人地址,多收件人以“,”(英文逗号)分割,
procedure write_data(p_conn in out nocopy utl_smtp.connection,
--调用邮件发送过程
if (last) then
---------------------------------------分割邮件地址----------------------------------------------
end;
l_sendoraddress varchar2(4000);
l_splite varchar2(10) := '++';
p_subject varchar2(4000);
然后用 l_crlf替换chr(10)。这一步是必须的,否则将不能发送邮件正文有多行的邮件
l_crlf varchar2(2) := utl_tcp.crlf;
/*关闭数据写入*/
write_data(l_conn, 'From', p_sendor);
type address_list is table of varchar2(100) index by binary_integer;
begin
p_email(l_sendoraddress, my_address_list(k));
end;
/*设置邮件头*/
procedure p_email(p_sendoraddress2 varchar2, --发送地址
p_splite_str(p_receiver);--处理邮件地址
l_conn utl_smtp.connection; --定义连接
/*设置发送人*/
---------------------------------------------主过程-----------------------------------------------------
if p_splite_flag = 1 then --表示处理邮件地址
end loop;
end;
for i in 1 .. l_len loop
begin
procedure end_boundary(conn in out nocopy utl_smtp.connection, last in boolean default false) is
p_sendor varchar2(20) := 'Gnie';
utl_smtp.write_data(l_conn, first_boundary);
begin
---------------------------------------------真正发送邮件的过程--------------------------------------------
end loop;
last_boundary constant varchar2(256) := '--' || boundary || '--' || l_crlf;
end;
*/
l_addr := '<' || l_addr || '>';
utl_smtp.open_data(l_conn);
l_addr := '<' || l_addr || '>';
--write_data(l_conn, 'Date', to_char(sysdate-1/3, 'dd Mon yy hh24:mi:ss'));
/*关闭连接*/
utl_smtp.write_data(conn, last_boundary);
/* smtp服务器登录校验 */
p_value in varchar2,
if i = l_len then
--调用邮件发送过程
p_port number := 25;
end if;
utl_smtp.close_data(l_conn);
boundary constant varchar2(256) := '-----BYSUK';
/*设置邮件主题*/
l_str := trim(rtrim(replace(replace(p_str, ';', ','), ' ', ''), ','));
p_need_smtp number := 0;
write_data(l_conn, 'To', p_receiver);
j int := 0; --表示邮件地址或者附件的个数
if substr(l_str, i, 1) <> ',' then
/*设置接收人*/
procedure p_splite_str(p_str varchar2,p_splite_flag int default 1) is
/*初始化邮件服务器信息,连接邮件服务器*/
end if;
first_boundary constant varchar2(256) := '--' || boundary || l_crlf;
--前后需要加上'<>',否则很多邮箱将不能发送邮件
utl_smtp.rcpt(l_conn, p_receiveraddress2); j := j + 1;
else
utl_smtp.helo(l_conn, p_server);
multipart_mime_type constant varchar2(256) := 'multipart/mixed; boundary="' || boundary || '"'; p_receiveraddress2 varchar2) --接受地址
end_boundary(l_conn); write_data(l_conn, 'Subject', p_subject); /*处理接收邮件地址列表,包括去空格、将;转换为,等*/
l_addr := '';
/* 设置邮件正文
into p_subject from dual;
end if;begin
/*设置发送地址和接收地址*/
my_address_list(j) := l_addr;
my_address_list(j) := l_addr;
p_pass varchar2(30) := '';
l_len int;
is
end;
end if;
把分隔符还原成chr(10)。这主要是为了shell中调用该过程,如果有多行,则先把多行的内容合并成一行,并用 l_splite分隔

p_server varchar2(20) := 'Mail_Server_IP';
复制代码 代码如下:
utl_smtp.command(l_conn, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(p_pass))));p_user varchar2(30) := '';
write_data(l_conn, '', replace(replace(p_txt, l_splite, chr(10)), chr(10), l_crlf), '', '');
l_addr varchar2(254) := '';
/* utl_raw.cast_to_raw 对解决中文乱码问题很重要*/
utl_smtp.write_data(l_conn, utl_tcp.crlf);
if p_need_smtp = 1 then
for k in 1 .. my_address_list.count loop
utl_smtp.write_data(conn, utl_tcp.crlf);
create or replace procedure bsd_sendemail (p_receiver varchar2,p_sub varchar2,p_txt varchar2)
j := j + 1;
utl_smtp.command(l_conn, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(p_user))));
----------------------------------------写mime邮件尾部-----------------------------------------------------
l_len := length(l_str);
write_data(l_conn, 'Content-Type', 'text/html;charset=gb2312');
utl_smtp.write_raw_data(p_conn, utl_raw.cast_to_raw(convert(p_name||p_splite||p_value ||p_crlf, 'ZHS16CGB231280')));
--单独空一行,否则,正文内容不显示
my_address_list address_list;
p_splite varchar2 default ':',
if p_splite_flag = 1 then
utl_smtp.write_data(l_conn, utl_tcp.crlf);
select replace('=?GB2312?B?'||utl_raw.cast_to_varchar2(utl_encode.base64_encode(rawtohex(p_sub)))||'?=',utl_tcp.crlf,'')
utl_smtp.mail(l_conn, p_sendoraddress2);
/*处理邮件地址,根据逗号分割邮件*/
end if;
end if;
相关热词: oracle
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://www.juheyunku.com/sql/oracle/1555.shtml
相关文章
热门TAG
命令 权重 外链 企业网站 白帽 php 织梦教程 dedecms修改内容 javascript 织梦 功能 标签 调用 详解 服务器 网站流量 实例解析 Dedecms 织梦cms HTML tags标签 python jquery教程 jquery windows SEO优化 蜘蛛 搜索引擎 网站收录 JSP最新文章
-
Window下Oracle Database 11g 发行
时间:2020-12-29
-
Oracle如何实现like多个值的
时间:2020-12-29
-
maven添加oracle依赖失败问题
时间:2020-12-29
-
OracleRAC基本概念及入门
时间:2020-12-29
-
Azure File Storage 基本用法
时间:2020-12-26
-
Oracle 权限(grant revoke)
时间:2020-12-26
-
Azure Queue Storage 基本用法
时间:2020-12-26
-
如何对比迁移前后的Orac
时间:2020-12-26
热门文章
-
Azure Queue Storage 基本用法 Azure Storage 之
时间:2020-12-26
-
Oracle存储过程编程详解
时间:2020-12-07
-
win10下oracle 11g安装图文教程
时间:2020-12-25
-
oracle 数据库学习 基本结构介绍
时间:2020-12-13
-
Azure File Storage 基本用法 Azure Storage 之 F
时间:2020-12-26
-
windows使用sqlpus连接oracle 数据库的教程图
时间:2020-12-25
-
Window下Oracle Database 11g 发行版2安装教程
时间:2020-12-29
-
Oracle解锁的方式介绍
时间:2020-12-14
-
linux下oracle设置开机自启动实现方法
时间:2020-12-13
-
Oracle学习记录之使用自定义函数和触发器
时间:2020-12-07
