知识大全 实例讲解如何通过Oracle成功发送邮件

Posted 中文

篇首语:宁死不背理,宁贫不堕志。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 实例讲解如何通过Oracle成功发送邮件相关的知识,希望对你有一定的参考价值。

实例讲解如何通过Oracle成功发送邮件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  LINUX AS +Oracle || 从Oracle成功发送邮件:

  示例如下

  具体的测试环境:LINUX AS Oracle

  SQL> select * from v$version;

  BANNER

  

  Oracle i Enterprise Edition Release Production

  PL/SQL Release Production

  CORE Production

  TNS for Linux: Version Production

  NLSRTL Version Production

  SQL> select * from v$version;

  Oracle Database g Enterprise Edition Release Prod

  PL/SQL Release Production

  CORE Production

  TNS for Linux: Version Production

  NLSRTL Version Production

  MAIL服务器为WIN WINMAIL

   保证ORACLE服务器到MAIL服务器网络畅通 端口打开

   创建发送邮件的procedure如下:

  

  CREATE OR REPLACE PROCEDURE SEND_MAIL

  (as_sender in varchar 邮件发送者

  as_recp in varchar 邮件接收者

  as_subject in varchar 邮件标题

  as_msg_body in varchar ) 邮件内容

  IS

  ls_mailhost varchar ( ) := mail server ; address or IP

  lc_mail_conn nnection;

  ls_subject varchar ( );

  ls_msg_body varchar ( );

  ls_username varchar ( ) := usercode ;

  ls_password varchar ( ) := password ;

  BEGIN

  lc_mail_conn := utl_smtp open_connection(ls_mailhost );

  utl_smtp helo(lc_mail_conn ls_mailhost);

  mand(lc_mail_conn AUTH LOGIN );

  mand(lc_mail_conn demo_base encode(utl_raw cast_to_raw(ls_username)));

  mand(lc_mail_conn demo_base 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( ) || chr( ) || To: || as_recp || chr( ) || chr( ) || ls_subject ||

  chr( ) || chr( ) || chr( ) || chr( ) || 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;

   执行发送邮件:

  exec send_mail( 我我 this is a oracle test mail );

  注意事项:上面的过程如果在编译中出现demo_base encode must be declared 请大家创建下面的包和包体;

  

  CREATE OR REPLACE PACKAGE demo_base IS

   Base encode a piece of binary data

  

   Note that this encode function does not split the encoded text into

   multiple lines with no more than bytes each as required by

   the MIME standard

   

  FUNCTION encode(r IN RAW) RETURN VARCHAR ;

  END;

  

  CREATE OR REPLACE PACKAGE BODY demo_base IS

  TYPE vc _table IS TABLE OF VARCHAR ( ) INDEX BY BINARY_INTEGER;

  map vc _table;

   Initialize the Base mapping

  PROCEDURE init_map IS

  BEGIN

  map( ) := A ; map( ) := B ; map( ) := C ; map( ) := D ; map( ) := E ;

  map( ) := F ; map( ) := G ; map( ) := H ; map( ) := I ; map( ):= J ;

  map( ):= K ; map( ):= L ; map( ):= M ; map( ):= N ; map( ):= O ;

  map( ):= P ; map( ):= Q ; map( ):= R ; map( ):= S ; map( ):= T ;

  map( ):= U ; map( ):= V ; map( ):= W ; map( ):= X ; map( ):= Y ;

  map( ):= Z ; map( ):= a ; map( ):= b ; map( ):= c ; map( ):= d ;

  map( ):= e ; map( ):= f ; map( ):= g ; map( ):= h ; map( ):= i ;

  map( ):= j ; map( ):= k ; map( ):= l ; map( ):= m ; map( ):= n ;

  map( ):= o ; map( ):= p ; map( ):= q ; map( ):= r ; map( ):= s ;

  map( ):= t ; map( ):= u ; map( ):= v ; map( ):= w ; map( ):= x ;

  map( ):= y ; map( ):= z ; map( ):= ; map( ):= ; map( ):= ;

  map( ):= ; map( ):= ; map( ):= ; map( ):= ; map( ):= ;

  map( ):= ; map( ):= ; map( ):= + ; map( ):= / ;

  END;

  FUNCTION encode(r IN RAW) RETURN VARCHAR IS

  i pls_integer;

  x pls_integer;

  y pls_integer;

  v VARCHAR ( );

  BEGIN

   For every bytes split them into bit units and map them to

   the Base characters

  i := ;

  WHILE ( i + <= utl_raw length(r) ) LOOP

  x := to_number(utl_raw substr(r i ) X ) * +

  to_number(utl_raw substr(r i + ) X ) * +

  to_number(utl_raw substr(r i + ) X );

  y := floor(x / ); v := v || map(y); x := x y * ;

  y := floor(x / ); v := v || map(y); x := x y * ;

  y := floor(x / ); v := v || map(y); x := x y * ;

  v := v || map(x);

  i := i + ;

  END LOOP;

   Process the remaining bytes that has fewer than bytes

  IF ( utl_raw length(r) i = ) THEN

  x := to_number(utl_raw substr(r i ) X );

  y := floor(x / ); v := v || map(y); x := x y * ;

  x := x * ; v := v || map(x);

  v := v || == ;

  ELSIF ( utl_raw length(r) i = ) THEN

  x := to_number(utl_raw substr(r i ) X ) * +

  to_number(utl_raw substr(r i + ) X );

  y := floor(x / ); v := v || map(y); x := x y * ;

  y := floor(x / ); v := v || map(y); x := x y * ;

  x := x * ; v := v || map(x);

  v := v || = ;

  END IF;

  RETURN v;

  END;

  BEGIN

  init_map;

  END;

cha138/Article/program/Oracle/201311/18084

相关参考

知识大全 实例讲解Oracle密码文件的使用与维护

实例讲解Oracle密码文件的使用与维护  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在Ora

知识大全 实例讲解Oracle监听口令及监听器安全

实例讲解Oracle监听口令及监听器安全  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  很多人都

知识大全 实例讲解Oracle数据库的分页显示

实例讲解Oracle数据库的分页显示  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lishixin

知识大全 实例讲解Oracle数据库自动增加ID的sql

实例讲解Oracle数据库自动增加ID的sql  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本

知识大全 实例讲解Oracle9i数据坏块的处理

实例讲解Oracle9i数据坏块的处理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  笔者在一台

知识大全 从asp.net页面发送电子邮件

  我们经常看到在一些博客页面里可以发表评论通过电子邮件通知版主(例如咱们的博客园)那么如何用发送电子邮件呢?我们可以借助NET提供的强大的类库达到目的  首先我们要引入SystemWebMail命名

知识大全 邮件发送组件

  先添加引入命名空间SystemNetMail  组件代码:  ///<summary>  ///邮件发送组件  ///</summary>  publicclassEmai

知识大全 java实现邮件发送

  要实现邮箱的发送需要一个已知账号和密码的邮箱并且开通了STMPPOP服务常见主流邮箱邮件收取和发送popstmp服务配置汇总介绍一文中详细介绍了各个邮箱开通服务的步骤  &nb

知识大全 java实现邮件的发送分享

  java实现邮件的发送分享方法如下  publicclassPopupAuthenticatorextendsAuthenticator  publicPasswordAuthentication

知识大全 .NET邮件发送

.NET邮件发送  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  usingSystem;&nbs