码迷,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
迷上了代码!