ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 用oracle发送电子邮件

用oracle发送电子邮件

原创 Linux操作系统 作者:space6212 时间:2019-05-19 13:03:05 0 删除 编辑
oracle内部提供发送邮件的包,用它能给我们对数据库的监控带来很大用处。

create or replace procedure souchang_Send_Email(
p_txt varchar2,
p_sub Varchar2,
p_SendorAddress Varchar2,
p_ReceiverAddress varchar2,
p_EmailServer varchar2,
p_Port Number Default 25,
p_need_smtp Int Default 0,
p_user Varchar2 Default Null,
p_pass Varchar2 Default Null
)
IS
/*
作用:用oracle发送邮件,支持多收件人。
作者:suk
参数说明:
p_txt :邮件正文
p_sub: 邮件标题
p_SendorAddress : 发送人邮件地址
p_ReceiverAddress : 接收地址,可以同时发送到多个地址上,地址之间用","或者";"隔开
p_EmailServer : 邮件服务器地址,可以是域名或者IP
p_Port :邮件服务器端口
p_need_smtp:是否需要smtp认证,0表示不需要,1表示需要
p_user:smtp验证需要的用户名
p_pass:smtp验证需要的密码
*/

l_addr Varchar2(200) :='';
l_len Int;
l_ReceiverAddress Varchar2(4000);

--真正发送邮件的过程
procedure p_Email(p_txt varchar2,
p_sub Varchar2,
p_SendorAddress Varchar2,
p_ReceiverAddress varchar2,
p_EmailServer varchar2,
p_Port Number,
p_user Varchar2,
p_pass Varchar2
)
Is
l_conn UTL_SMTP.CONNECTION;--定义连接
l_crlf VARCHAR2( 2 ):= CHR( 13 ) || CHR( 10 );
l_mesg VARCHAR2( 4000 );

Begin
/*初始化邮件服务器信息,连接邮件服务器*/
l_conn:= utl_smtp.open_connection( p_EmailServer, p_Port );
utl_smtp.helo( l_conn, p_EmailServer );

/* smtp服务器登录校验 */
If p_need_smtp=1 Then
utl_smtp.command(l_conn, 'AUTH LOGIN','');
utl_smtp.command(l_conn, utl_encode.base64_encode(utl_raw.cast_to_raw(p_user)), '');
utl_smtp.command(l_conn, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(p_pass))), '');
End If;

/*设置发送地址和接收地址*/
utl_smtp.mail( l_conn, p_SendorAddress);
utl_smtp.rcpt( l_conn, p_ReceiverAddress );

/*设置邮件头*/
l_mesg:=
'Content-Type: text/plain; Charset=GB2312' || l_crlf ||
'Date:' || TO_CHAR( SYSDATE, 'yyyy-mm-dd hh24:mi:ss' ) || l_crlf ||
'From:' || p_SendorAddress || l_crlf ||
'Subject: '||p_sub || l_crlf ||
'To: '|| p_ReceiverAddress || l_crlf ||
'Content-Type: text/plain; Charset=GB2312' || l_crlf ||
'' || l_crlf || p_txt || l_crlf ;

/*发送邮件*/
utl_smtp.data( l_conn, l_mesg );

/*关闭与邮件服务器的连接*/
utl_smtp.quit( l_conn );

/*异常处理*/
Exception
When Others Then
dbms_output.put_line(Sqlcode||':'||Sqlerrm);
--Raise;

End;


Begin
/*处理接收邮件地址列表,包括去空格、将;转换为,等*/
l_ReceiverAddress:=trim(rtrim(replace(Replace(p_ReceiverAddress,';',','),' ',''),','));
l_len:=length(l_ReceiverAddress);

/*处理邮件地址,根据逗号分割邮件*/
For i In 1..l_len Loop
If substr(l_ReceiverAddress,i,1)<>',' Then
l_addr:=l_addr||substr(l_ReceiverAddress,i,1);
Else
--调用邮件发送过程
p_Email(p_txt,p_sub,p_SendorAddress,l_addr,p_EmailServer,p_Port,p_user,p_pass);
l_addr:='';
End If;
If i=l_len Then
--调用邮件发送过程
p_Email(p_txt,p_sub,p_SendorAddress,l_addr,p_EmailServer,p_Port,p_user,p_pass);
End If;
End Loop;

END;

执行:

SQL> exec souchang_send_email('sssss','ttttt','space6212@gmail.com','space6212@163.com','218.249.xx.xxx',25);

PL/SQL procedure successfully completed

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/231499/viewspace-63718/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2005-01-25

  • 博文量
    245
  • 访问量
    170204