实例讲解如何通过Oracle成功发送邮件-入门基础
2011-08-17 16:59
1071 查看
LINUX AS3+Oracle 9.2||10.20.1从Oracle成功发送邮件:
示例如下:
具体的测试环境:LINUX AS3 , Oracle 9.0.2.4
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
PL/SQL Release 9.2.0.4.0 - Production
CORE 9.2.0.3.0 Production
TNS for Linux: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production
SQL> select * from v$version;
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
MAIL服务器为WIN2003,WINMAIL
1.保证ORACLE服务器到MAIL服务器网络畅通,25端口打开
2.创建发送邮件的procedure如下:
---------------------------------------
CREATE OR REPLACE PROCEDURE SEND_MAIL
(as_sender in varchar2, --邮件发送者
as_recp in varchar2, --邮件接收者
as_subject in varchar2, --邮件标题
as_msg_body in varchar2) --邮件内容
IS
ls_mailhost varchar2(30) := 'mail server'; -- address or IP
lc_mail_conn utl_smtp.connection;
ls_subject varchar2(100);
ls_msg_body varchar2(20000);
ls_username varchar2(256) := 'usercode';
ls_password varchar2(256) := 'password';
BEGIN
lc_mail_conn := utl_smtp.open_connection(ls_mailhost, 25);
utl_smtp.helo(lc_mail_conn, ls_mailhost);
utl_smtp.command(lc_mail_conn, 'AUTH LOGIN');
utl_smtp.command(lc_mail_conn, demo_base64.encode(utl_raw.cast_to_raw(ls_username)));
utl_smtp.command(lc_mail_conn, demo_base64.encode(utl_raw.cast_to_raw(ls_password)));
ls_subject := 'Subject: [' || upper(sys_context('userenv', 'db_name')) || '] - ' || as_subject;
ls_msg_body := as_msg_body;
utl_smtp.mail(lc_mail_conn, '<'||as_sender||'>'); --这里的'<' 一定要写,不然会出现permanent error
utl_smtp.rcpt(lc_mail_conn, '<'||as_recp||'>');--这里的'<' 一定要写,不然会出现permanent error
utl_smtp.open_data(lc_mail_conn);
ls_msg_body := 'From: ' || as_sender || chr(13) || chr(10) || 'To: ' || as_recp || chr(13) || chr(10) || ls_subject ||
chr(13) || chr(10) || chr(13) || chr(10) || ls_msg_body;
utl_smtp.write_raw_data(lc_mail_conn, utl_raw.cast_to_raw(ls_msg_body)); --这样写subject可以支持中文但body内容不支持中文;
-- utl_smtp.write_data(lc_mail_conn, ls_msg_body); --这样写subject不支持中文
utl_smtp.close_data(lc_mail_conn);
utl_smtp.quit(lc_mail_conn);
EXCEPTION
WHEN UTL_SMTP.INVALID_OPERATION THEN
dbms_output.put_line('invalid operation');
WHEN UTL_SMTP.TRANSIENT_ERROR THEN
dbms_output.put_line('transient error');
WHEN UTL_SMTP.PERMANENT_ERROR THEN
dbms_output.put_line('permanent error');
WHEN OTHERS THEN
dbms_output.put_line('others');
end send_mail;
3.执行发送邮件:
exec send_mail('heyu@163.net','admin@163.net','我我','this is a oracle test mail');
注意事项:上面的过程如果在编译中出现demo_base64.encode must be declared,请大家创建下面的包和包体;
---------------------------------
CREATE OR REPLACE PACKAGE demo_base64 IS
-- Base64-encode a piece of binary data.
--
-- Note that this encode function does not split the encoded text into
-- multiple lines with no more than 76 bytes each as required by
-- the MIME standard.
文章转载自网管之家:http://www.bitscn.com/pdb/oracle/200804/137713.html
示例如下:
具体的测试环境:LINUX AS3 , Oracle 9.0.2.4
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
PL/SQL Release 9.2.0.4.0 - Production
CORE 9.2.0.3.0 Production
TNS for Linux: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production
SQL> select * from v$version;
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
MAIL服务器为WIN2003,WINMAIL
1.保证ORACLE服务器到MAIL服务器网络畅通,25端口打开
2.创建发送邮件的procedure如下:
---------------------------------------
CREATE OR REPLACE PROCEDURE SEND_MAIL
(as_sender in varchar2, --邮件发送者
as_recp in varchar2, --邮件接收者
as_subject in varchar2, --邮件标题
as_msg_body in varchar2) --邮件内容
IS
ls_mailhost varchar2(30) := 'mail server'; -- address or IP
lc_mail_conn utl_smtp.connection;
ls_subject varchar2(100);
ls_msg_body varchar2(20000);
ls_username varchar2(256) := 'usercode';
ls_password varchar2(256) := 'password';
BEGIN
lc_mail_conn := utl_smtp.open_connection(ls_mailhost, 25);
utl_smtp.helo(lc_mail_conn, ls_mailhost);
utl_smtp.command(lc_mail_conn, 'AUTH LOGIN');
utl_smtp.command(lc_mail_conn, demo_base64.encode(utl_raw.cast_to_raw(ls_username)));
utl_smtp.command(lc_mail_conn, demo_base64.encode(utl_raw.cast_to_raw(ls_password)));
ls_subject := 'Subject: [' || upper(sys_context('userenv', 'db_name')) || '] - ' || as_subject;
ls_msg_body := as_msg_body;
utl_smtp.mail(lc_mail_conn, '<'||as_sender||'>'); --这里的'<' 一定要写,不然会出现permanent error
utl_smtp.rcpt(lc_mail_conn, '<'||as_recp||'>');--这里的'<' 一定要写,不然会出现permanent error
utl_smtp.open_data(lc_mail_conn);
ls_msg_body := 'From: ' || as_sender || chr(13) || chr(10) || 'To: ' || as_recp || chr(13) || chr(10) || ls_subject ||
chr(13) || chr(10) || chr(13) || chr(10) || ls_msg_body;
utl_smtp.write_raw_data(lc_mail_conn, utl_raw.cast_to_raw(ls_msg_body)); --这样写subject可以支持中文但body内容不支持中文;
-- utl_smtp.write_data(lc_mail_conn, ls_msg_body); --这样写subject不支持中文
utl_smtp.close_data(lc_mail_conn);
utl_smtp.quit(lc_mail_conn);
EXCEPTION
WHEN UTL_SMTP.INVALID_OPERATION THEN
dbms_output.put_line('invalid operation');
WHEN UTL_SMTP.TRANSIENT_ERROR THEN
dbms_output.put_line('transient error');
WHEN UTL_SMTP.PERMANENT_ERROR THEN
dbms_output.put_line('permanent error');
WHEN OTHERS THEN
dbms_output.put_line('others');
end send_mail;
3.执行发送邮件:
exec send_mail('heyu@163.net','admin@163.net','我我','this is a oracle test mail');
注意事项:上面的过程如果在编译中出现demo_base64.encode must be declared,请大家创建下面的包和包体;
---------------------------------
CREATE OR REPLACE PACKAGE demo_base64 IS
-- Base64-encode a piece of binary data.
--
-- Note that this encode function does not split the encoded text into
-- multiple lines with no more than 76 bytes each as required by
-- the MIME standard.
文章转载自网管之家:http://www.bitscn.com/pdb/oracle/200804/137713.html
相关文章推荐
- CDONTS.DLL发送邮件代码.成功测试通过
- javamail发送邮件实例讲解
- Oracle之索引(Index)实例讲解 - 基础
- 黄聪:如何利用PHP通过mail方法发送邮件【转】
- Amazon SES介绍 - 如何通过SES发送邮件
- C# 如何通过mailto标签和SMTP协议两种方式发送邮件
- 如何解决 JMeter 通过 JDBC 访问 Oracle 和 MySQL 的问题 (留言中有 Test Plan 实例下载)
- windows下使用php自带的mail函数实现简单的邮件发送实例(QQ亲试成功)
- Linux学习-->如何通过Shell脚本实现发送邮件通知功能?
- Linux入职基础-7.4_Makefile文件使用入门很简单(实例讲解)
- 如何实现通过自己的程序发送邮件
- 如何通过 ASP 来发送带附件、格式为 HTML 的邮件?下面提供了一个例程.
- Dubbo入门基础与实例讲解(转)
- 实例讲解:aiCache如何通过header-driven设置缓存失效
- Dubbo学习总结(1)——Dubbo入门基础与实例讲解
- python - 如何通过GMail发送邮件:smtplib的使用
- asp.net mvc发送邮件实例讲解
- 如何将配置文件通过邮件发送给用户
- Oracle 多实例如何通过EM进行访问-portlist.ini
- 如何解决 JMeter 通过 JDBC 访问 Oracle 和 MySQL 的问题 (留言中有 Test Plan 实例下载)