oracle 邮件发送的原理,oracle 发送电子邮件

因工作需要研究了一下oracle发送电子邮件,网上多少的版本都有些问题。下面这段存储过程是参考metalink上在的版本改进而来,在oracle 10g 调试过,可以发送中文的电子邮件。这段存储过程包含邮件服务器要身份验证,请修改相应的部分。

CREATE OR REPLACE PROCEDURE send_email

( p_sender    IN VARCHAR2,

p_recipient IN VARCHAR2,

P_subject   IN VARCHAR2,

p_message   IN VARCHAR2)

AS

mailhost VARCHAR2(100) := 'smtp.163.com';

mail_conn utl_smtp.connection;

msg varchar2(4000);

PROCEDURE send_header(conn  IN OUT NOCOPY utl_smtp.connection,

name  IN VARCHAR2,

value IN VARCHAR2) IS

BEGIN

utl_smtp.write_data(conn, name || ': =?iso-8859-1?Q?' ||

utl_raw.cast_to_varchar2(  utl_encode.quoted_printable_encode(utl_raw.

cast_to_raw(value))) || '?=' || utl_tcp.crlf);

END;

BEGIN

mail_conn :=utl_smtp.open_connection(mailhost);

utl_smtp.helo(mail_conn,mailhost);

UTL_SMTP.command (mail_conn, 'AUTH LOGIN');

utl_smtp.command(mail_conn, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw('account'))));

utl_smtp.command(mail_conn, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw('password'))));

utl_smtp.mail(mail_conn,p_sender);    -- sender

utl_smtp.rcpt(mail_conn,p_recipient); -- recipient

utl_smtp.open_data(mail_conn);

send_header(mail_conn,'From',    p_sender);

send_header(mail_conn,'To',      p_recipient);

send_header(mail_conn,'Subject', p_subject);

utl_smtp.write_data(mail_conn, 'MIME-Version: 1.0' || chr(13) || chr(10));

utl_smtp.write_data(mail_conn, 'Content-type: text/plain;Charset=UTF8;' || chr(13) || chr(10));

utl_smtp.write_data(mail_conn, 'Content-Transfer-Encoding: base64' || chr(13) || chr(10));

utl_smtp.write_data(mail_conn, chr(13) || chr(10));

utl_smtp.write_data(mail_conn, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(p_message))));

utl_smtp.close_data(mail_conn);

utl_smtp.quit(mail_conn);

EXCEPTION

WHEN utl_smtp.transient_error OR utl_smtp.permanent_error THEN

utl_smtp.quit(mail_conn);

raise_application_error(-20000,

'Failed tosend mail due to the following error: ' || sqlerrm);

WHEN OTHERS THEN

raise_application_error(-20001,

'The following error has occured: ' || sqlerrm);

END;

/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值