Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

How to ZIP file and send via SMTP in Oracle

HimaOneJul 1 2013 — edited Jul 23 2013

Dear All,

I want to send data every month via email where the data i got from view.

The problem is the file is to big, so i should zip it.

the question is How i can perform it with procedure and send it automatically via Job every 1st month

what i've done was i create a procedure to make the file in zip

[quote/]

CREATE OR REPLACE PROCEDURE production.CREATE_EXCEL_DTKPITerminate IS

    vvrun varchar2(3000);

    vsender varchar2(100);

    vrecepient varchar2(100);

  vccrecipient varchar2(1000);

    vsubject varchar2(1000);

    vmessage long;

    v_loc varchar2(5);

/******************************************************************************

   NAME:       CREATE_EXCEL

   PURPOSE:

   REVISIONS:

   Ver        Date        Author           Description

   ---------  ----------  ---------------  ------------------------------------

   1.0        10/15/2012          1. Created this procedure.

   NOTES:

   Automatically available Auto Replace Keywords:

      Object Name:     CREATE_EXCEL

      Sysdate:         10/15/2012

      Date and Time:   10/15/2012, 9:42:40 , and 10/15/2012 9:42:40

      Username:         (set in TOAD Options, Procedure Editor)

      Table Name:       (set in the "New PL/SQL Object" dialog)

******************************************************************************/

begin

   vsender := 'asdada@test.com';

     vrecepient := 'xxx@test.com';

  vccrecipient := 'yyy@test.com';

     vsubject := 'KPI Terminate'||TO_CHAR(SYSDATE,'MM-YYYY');

     vmessage :=

        'MESSAGE .';

     as_xlsx.query2sheet('

     select cmp_company,emp#,name,class,goucode,goudesc,job,job_name,tglkeluar

            ,nac_seq,nac_code,nac_type,nac_begin,nac_desc,reason,reason_code

            from V_KPITerminate

     ');

     --insert into blobs(blob_id,blob_name)

     --values (1,as_xlsx.finish);

     SEND_SMTP_PUZZLE_DTKRY(vsender,vrecepient,vccrecipient,vsubject,vmessage,as_xlsx.finish,'DataKPITerm -'||to_char(sysdate,'yyyy')||'.zip');

  --as_xlsx.save( 'BASE_DIR3', 'SWT.xls' );

end;

/

[/quote]

when i execute this, Error ocured

Message       : ORA-29278: SMTP transient error: 421 Service not available

ORA-06512           : at "SYS.UTL_SMTP", line 21

ORA-06512           : at "SYS.UTL_SMTP", line 97

ORA-06512           : at "SYS.UTL_SMTP", line 399

ORA-06512           : at "PU22PROD_123.SEND_SMTP_PUZZLE_DTKRY", line 151

ORA-29294           : A data error occurred during compression or uncompression.

ORA-06512           : at "PU22PROD_123.CREATE_EXCEL_KPITERM", line 60

ORA-06512           : at line 2

cann anyone help?

the data is too big so i prefer it zip.. can anyone help..

the SMTP I use is like this

CREATE OR REPLACE PROCEDURE production.SEND_SMTP_PUZZLE_DTKRY (pSender VARCHAR2,pRecipient VARCHAR2, pCCRecipient VARCHAR2, pSubject VARCHAR2,pMessage LONG,pattach BLOB,pfilename VARCHAR2) IS

  v_src_loc  BFILE := BFILENAME('BASE_DIR3', 'pajak.xls');

      l_buffer   RAW(54);

      l_amount   BINARY_INTEGER := 54;

     l_pos      INTEGER := 1;

     l_blob     BLOB := EMPTY_BLOB;

     l_blob_len INTEGER;

      v_amount   INTEGER;

      crlf CONSTANT VARCHAR2(2):= CHR(13) || CHR(10);

  v_connection_handle  UTL_SMTP.CONNECTION;

    v_smtp_host          VARCHAR2(30) := 'mail.mayora.co.id'; --My mail server, replace it with yours.

    v_subject            VARCHAR2(30) := 'Your Test Mail';

    l_message            VARCHAR2(200) := 'This is test mail using UTL_SMTP';

  pcc varchar2(50);

  i number := 1;

  j number := 1;

  l_original_blob blob;

  l_compressed_blob blob;

BEGIN

   BEGIN

     /*Preparing the LOB from file for attachment. */

     --DBMS_LOB.OPEN(v_src_loc, DBMS_LOB.LOB_READONLY); --Read the file

     --dBMS_LOB.CREATETEMPORARY(l_blob, TRUE); --Create temporary LOB to store the file.

     --v_amount := DBMS_LOB.GETLENGTH(v_src_loc); --Amount to store.

     --DBMS_LOB.LOADFROMFILE(l_blob, v_src_loc, v_amount); -- Loading from file into temporary LOB

     --l_blob_len := DBMS_LOB.getlength(l_blob);

  l_original_blob     := pattach;

     l_compressed_blob   := TO_BLOB('1');

  UTL_COMPRESS.lz_compress (src => l_original_blob,

                               dst => l_compressed_blob);

  --DBMS_LOB.FREETEMPORARY(l_compressed_blob);

  l_blob := l_compressed_blob;

     l_blob_len := DBMS_LOB.getlength(l_blob);

     /*UTL_SMTP related coding. */

     v_connection_handle := UTL_SMTP.OPEN_CONNECTION(host => v_smtp_host);

     UTL_SMTP.HELO(v_connection_handle, v_smtp_host);

     UTL_SMTP.MAIL(v_connection_handle, psender);

     UTL_SMTP.RCPT(v_connection_handle, precipient);

    if pCCRecipient is not null then

        if(instr(pCCRecipient,',') = 0) then

        utl_smtp.rcpt(v_connection_handle, pCCRecipient);

        else

       while(instr(pCCRecipient,',',i) > 0)

        loop

        pcc := substr(pCCRecipient,i, instr(substr(pCCRecipient,i),',')-1);

        i := i+instr(substr(pCCRecipient,i),',');

        utl_smtp.rcpt(v_connection_handle,pcc);

        end loop;

        pcc := substr(pCCRecipient,i,length(pCCRecipient));

        utl_smtp.rcpt(v_connection_handle,pcc);

        end if;

    end if;

     --UTL_SMTP.RCPT(v_connection_handle, v_cc_email_address);

     UTL_SMTP.OPEN_DATA(v_connection_handle);

     UTL_SMTP.WRITE_DATA(v_connection_handle,

                           'FROM' || ': ' ||  psender || UTL_TCP.CRLF);

     UTL_SMTP.WRITE_DATA(v_connection_handle,

                           'TO' || ': ' ||  precipient || UTL_TCP.CRLF);

     UTL_SMTP.WRITE_DATA(v_connection_handle,

                           'CC' || ': ' ||  pCCRecipient || UTL_TCP.CRLF);

     UTL_SMTP.WRITE_DATA(v_connection_handle,

                           'SUBJECT' || ': ' ||  pSubject || UTL_TCP.CRLF);

   --MIME header.

     UTL_SMTP.WRITE_DATA(v_connection_handle,

                         'MIME-Version: 1.0' || UTL_TCP.CRLF);

    UTL_SMTP.WRITE_DATA(v_connection_handle,

                         'Content-Type: multipart/mixed; ' || UTL_TCP.CRLF);

     UTL_SMTP.WRITE_DATA(v_connection_handle,

                         ' boundary= "' || 'BASE_DIR3.SECBOUND' || '"' ||

                         UTL_TCP.CRLF);

     UTL_SMTP.WRITE_DATA(v_connection_handle, UTL_TCP.CRLF);

     -- Mail Body

     UTL_SMTP.WRITE_DATA(v_connection_handle,

                         '--' || 'BASE_DIR3.SECBOUND' || UTL_TCP.CRLF);

     UTL_SMTP.WRITE_DATA(v_connection_handle,

                         'Content-Type: text/plain;' || UTL_TCP.CRLF);

     UTL_SMTP.WRITE_DATA(v_connection_handle,

                         ' charset=US-ASCII' || UTL_TCP.CRLF);

     UTL_SMTP.WRITE_DATA(v_connection_handle, UTL_TCP.CRLF);

     UTL_SMTP.WRITE_DATA(v_connection_handle, Pmessage || UTL_TCP.CRLF);

     UTL_SMTP.WRITE_DATA(v_connection_handle, UTL_TCP.CRLF);

     -- Mail Attachment

   UTL_SMTP.WRITE_DATA(v_connection_handle,

                         '--' || 'BASE_DIR3.SECBOUND' || UTL_TCP.CRLF);

    UTL_SMTP.WRITE_DATA(v_connection_handle,

                         'Content-Type: application/octet-stream' ||

                         UTL_TCP.CRLF);

     UTL_SMTP.WRITE_DATA(v_connection_handle,

                         'Content-Disposition: attachment; ' || UTL_TCP.CRLF);

     UTL_SMTP.WRITE_DATA(v_connection_handle,

                         ' filename="' || pfilename || '"' || --My filename

                         UTL_TCP.CRLF);

     UTL_SMTP.WRITE_DATA(v_connection_handle,

                         'Content-Transfer-Encoding: base64' || UTL_TCP.CRLF);

     UTL_SMTP.WRITE_DATA(v_connection_handle, UTL_TCP.CRLF);

   /* Writing the BLOL in chunks */

     WHILE l_pos < l_blob_len LOOP

       DBMS_LOB.READ(l_blob, l_amount, l_pos, l_buffer);

       UTL_SMTP.write_raw_data(v_connection_handle,

                              UTL_ENCODE.BASE64_ENCODE(l_buffer));

       UTL_SMTP.WRITE_DATA(v_connection_handle, UTL_TCP.CRLF);

       l_buffer := NULL;

       l_pos    := l_pos + l_amount;

    END LOOP;

     UTL_SMTP.WRITE_DATA(v_connection_handle, UTL_TCP.CRLF);

     -- Close Email

     UTL_SMTP.WRITE_DATA(v_connection_handle,

                         '--' || 'BASE_DIR3.SECBOUND' || '--' || UTL_TCP.CRLF);

     UTL_SMTP.WRITE_DATA(v_connection_handle,

                         UTL_TCP.CRLF || '.' || UTL_TCP.CRLF);

     UTL_SMTP.CLOSE_DATA(v_connection_handle);

     UTL_SMTP.QUIT(v_connection_handle);

  EXCEPTION

    WHEN OTHERS THEN NULL;

    --return 1;

      UTL_SMTP.QUIT(v_connection_handle);

      RAISE;

  END;

END;

/

Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Aug 20 2013
Added on Jul 1 2013
10 comments
2,243 views