oracle发送邮件存储过程:

create or replace procedure bsd_sendemail(

p_receiver varchar2,

p_sub varchar2,

p_txt varchar2)

is

p_user varchar2(30):='';

p_pass varchar2(30):='';

p_sendor varchar2(20):='Gnie';

p_server varchar2(20):='Mail_Server_IP';

p_port number:=25;

p_need_smtp number:=0;

p_subject varchar2(4000);

l_crlf varchar2(2):=utl_tcp.crlf;

l_sendoraddress varchar2(4000);

l_splite varchar2(10):='++';

boundary constant varchar2(256):='-----BYSUK';

first_boundary constant varchar2(256):='--'||boundary||l_crlf;

last_boundary constant varchar2(256):='--'||boundary||'--'||l_crlf;

multipart_mime_type constant varchar2(256):='multipart/mixed boundary := "' || boundary || '"';

type address_list is table of varchar2(100) index by binary_integer;

my_address_list address_list;

---------------------------------------分割邮件地址----------------------------------------------

procedure p_splite_str(p_str varchar2,p_splite_flag int default 1 )

is

l_addr varchar2(254):='';

l_len int;

l_str varchar2(4000);

j int:=0;--表示邮件地址或者附件的个数

begin /*处理接收邮件地址列表,包括去空格、将;转换为,等*/

l_str:=trim(rtrim(replace(replace(p_str,';',','),'',''),','));

l_len:=length(l_str);

for i in 1..l_len loop

if substr(l_str,i,1) <> ',' then

l_addr:=l_addr||substr(l_str,i,1);

else j:=j+1;

if p_splite_flag = 1 then--表示处理邮件地址

--前后需要加上'<>',否则很多邮箱将不能发送邮件

l_addr:='';

--调用邮件发送过程

my_address_list(j):=l_addr;

end if;

l_addr:='';

end if;

if i=l_len then

j:=j+1;

if p_splite_flag=1 then

--调用邮件发送过程

l_addr:='';

my_address_list(j):=l_addr;

end if;

end if;

end loop;

end;

-------------------------------

更多推荐