码迷,mamicode.com
首页 > 数据库 > 详细

PLSQL NOTE--------network utl_smtp package

时间:2016-05-16 17:16:05      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:

use utl_smtp to send mail

create or replace procedure mail_send( message   in varchar2,
                                       sender    in varchar2,
                                       recipient in varchar2,
                                       subject   in varchar2 default my mail test) is
    mailhost varchar2(30) := smtp.163.com;
    c        utl_smtp.connection;
    msg      varchar2(1000);
begin
    msg := Date:  || to_char(sysdate - 1, dd mon yy hh24:mi:ss) || UTL_TCP.CRLF ||
           From: < || sender || > || UTL_TCP.CRLF ||
           subject:  || subject || UTL_TCP.CRLF ||
           To: < || recipient || > || UTL_TCP.CRLF ||
           ‘‘ || UTL_TCP.CRLF || message;
    dbms_output.put_line(msg);
    c := utl_smtp.open_connection(mailhost, 25);
    utl_smtp.ehlo(c, mailhost);
    utl_smtp.command(c, auth login);
    utl_smtp.command(c, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(&username))));
    utl_smtp.command(c, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(&password))));
    utl_smtp.mail(c, sender);
    utl_smtp.rcpt(c, recipient);
    utl_smtp.open_data(c);
    utl_smtp.write_raw_data(c, utl_raw.cast_to_raw(msg));
    utl_smtp.close_data(c);
    utl_smtp.quit(c);
EXCEPTION  
    WHEN others THEN 
    BEGIN 
        dbms_output.put_line (send_message error: ||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE );  
        dbms_output.put_line (send_message error: ||sqlerrm );  
        utl_smtp.quit(c); 
        exception when others then 
            BEGIN 
                dbms_output.put_line (exception error: ||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE );  
                dbms_output.put_line (exception error: ||sqlerrm ); 
            end; 
    END; 
END; 
/

 Notes
1.port need to change according to server setting. For example gmail smtp port is 465.
2.use utl_smtp.command to use Third-party mailbox.
3.addresses of sender and receiver must append string "<" and ">" .
4.use utl_smtp.write_raw_data instead of write_data to solve chinese character garbled.

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

use utl_tcp to send (not tested)

CREATE OR REPLACE PROCEDURE SEND_MAIL (
   msg_from    varchar2 := EMAILADDRESS@DOMAIN.COM,    ----- MAIL BOX SENDING THE EMAIL
  msg_to      varchar2 := EMAILADDRESS@DOMAIN.COM,    ----- MAIL BOX RECIEVING THE EMAIL
   msg_subject varchar2 := Output file TEST1,          ----- EMAIL SUBJECT
   msg_text    varchar2 := THIS IS THE TEXT OF THE EMAIL MESSAGE.,
   v_output1   varchar2 := THIS IS THE TEXT OF THE ATTACHMENT FILE. THIS TEXT WILL BE IN A TEXT FILE ATTACHED TO THE EMAIL.)
 IS
   c  utl_tcp.connection;
   rc integer;
   crlf VARCHAR2(2):= CHR(13)||CHR(10);
   mesg VARCHAR2(32767);
 BEGIN
   c := utl_tcp.open_connection(196.35.140.18, 25);       ----- OPEN SMTP PORT CONNECTION
   rc := utl_tcp.write_line(c, HELO 196.35.140.18);       ----- PERFORMS HANDSHAKING WITH SMTP SERVER
   dbms_output.put_line(utl_tcp.get_line(c, TRUE));
   rc := utl_tcp.write_line(c, EHLO 196.35.140.18);       ----- PERFORMS HANDSHAKING, INCLUDING EXTRA INFORMATION
   dbms_output.put_line(utl_tcp.get_line(c, TRUE));
   rc := utl_tcp.write_line(c, MAIL FROM: ||msg_from);    ----- MAIL BOX SENDING THE EMAIL
   dbms_output.put_line(utl_tcp.get_line(c, TRUE));
   rc := utl_tcp.write_line(c, RCPT TO: ||msg_to);        ----- MAIL BOX RECIEVING THE EMAIL
   dbms_output.put_line(utl_tcp.get_line(c, TRUE));
   rc := utl_tcp.write_line(c, DATA);                     ----- EMAIL MESSAGE BODY START
   dbms_output.put_line(utl_tcp.get_line(c, TRUE));
   rc := utl_tcp.write_line(c, Date: ||TO_CHAR( SYSDATE, dd Mon yy hh24:mi:ss ));
   rc := utl_tcp.write_line(c, From: ||msg_from|| <||msg_from||>);
   rc := utl_tcp.write_line(c, MIME-Version: 1.0);
   rc := utl_tcp.write_line(c, To: ||msg_to|| <||msg_to||>);
   rc := utl_tcp.write_line(c, Subject: ||msg_subject);
   rc := utl_tcp.write_line(c, Content-Type: multipart/mixed;);  ----- INDICATES THAT THE BODY CONSISTS OF MORE THAN ONE PART
   rc := utl_tcp.write_line(c,  boundary="-----SECBOUND");       ----- SEPERATOR USED TO SEPERATE THE BODY PARTS
   rc := utl_tcp.write_line(c, );                                ----- DO NOT REMOVE THIS BLANK LINE - PART OF MIME STANDARD
   rc := utl_tcp.write_line(c, -------SECBOUND); 
   rc := utl_tcp.write_line(c, Content-Type: text/plain); ----- 1ST BODY PART. EMAIL TEXT MESSAGE 
   rc := utl_tcp.write_line(c, Content-Transfer-Encoding: 7bit); 
   rc := utl_tcp.write_line(c, ); 
   rc := utl_tcp.write_line(c, msg_text); ----- TEXT OF EMAIL MESSAGE 
   rc := utl_tcp.write_line(c, ); 
   rc := utl_tcp.write_line(c, -------SECBOUND); 
   rc := utl_tcp.write_line(c, Content-Type: text/plain;); ----- 2ND BODY PART. 
   rc := utl_tcp.write_line(c,  name="Test.txt"); 
   rc := utl_tcp.write_line(c, Content-Transfer_Encoding: 8bit); 
   rc := utl_tcp.write_line(c, Content-Disposition: attachment;); ----- INDICATES THAT THIS IS AN ATTACHMENT 
   rc := utl_tcp.write_line(c,  filename="Test.txt"); ----- SUGGESTED FILE NAME FOR ATTACHMENT 
   rc := utl_tcp.write_line(c, ); 
   rc := utl_tcp.write_line(c, v_output1); 
   rc := utl_tcp.write_line(c, -------SECBOUND--); 
   rc := utl_tcp.write_line(c, ); 
   rc := utl_tcp.write_line(c, .); ----- EMAIL MESSAGE BODY END 
   dbms_output.put_line(utl_tcp.get_line(c, TRUE)); 
   rc := utl_tcp.write_line(c, QUIT); ----- ENDS EMAIL TRANSACTION 
   dbms_output.put_line(utl_tcp.get_line(c, TRUE)); 
   utl_tcp.close_connection(c); ----- CLOSE SMTP PORT CONNECTION 
   END; 
   /

 

PLSQL NOTE--------network utl_smtp package

标签:

原文地址:http://www.cnblogs.com/ct-blog/p/5498210.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!