Oracle veritabanlarında UTL_MAIL ile Ek Dosya Gönderimi

18 Haz by Ahmet Duruöz

Oracle veritabanlarında UTL_MAIL ile Ek Dosya Gönderimi

Utl_mail paketini kullanarak 32767 byte’a kadar herhangi bir dosya gönderebilirsiniz.

Aşağıdaki adımları izleyerek utl_mail paketini kullanarak dosya eki gönderen bir prosedür oluşturabilirsiniz.

Bir dizin oluşturun ve e-posta gönderecek veritabanı kullanıcısına okuma ve yazma izinleri verin:

CREATE OR REPLACE DIRECTORY HC_DIR AS '/home/oracle/scripts/hc';

GRANT READ,WRITE ON DIRECTORY HC_DIR TO SYSTEM;

Ekli posta göndermek için gerekli prosedürü oluşturun :

CREATE OR REPLACE PROCEDURE send_email (FileName IN VARCHAR2, AttachmentName IN VARCHAR2, MailFrom IN VARCHAR2, MailTo IN VARCHAR2, MailSubject IN VARCHAR2, MailContent IN VARCHAR2)
AS

   Attachment_Too_Large EXCEPTION;
   PRAGMA EXCEPTION_INIT (Attachment_Too_Large, -6502);

   FileHandle  BFILE;
   Buffer      RAW(32767);  
   Amount      INTEGER;
   Offset      INTEGER := 1;

BEGIN  

   FileHandle := BFILENAME('HC_DIR', FileName);
   Amount := DBMS_LOB.GETLENGTH(FileHandle);

   DBMS_OUTPUT.PUT_LINE('Ek Dosya Boyutu : ' || Amount || ' bytes');

   DBMS_LOB.FILEOPEN(FileHandle, DBMS_LOB.FILE_READONLY);
   DBMS_LOB.READ(FileHandle, Amount, Offset, Buffer);
   DBMS_LOB.FILECLOSE(FileHandle); 

   UTL_MAIL.SEND_ATTACH_RAW(sender =>      MailFrom, 
                            recipients =>  MailTo, 
                            subject =>     MailSubject, 
                            message =>     MailContent, 
                            attachment =>   Buffer, 
                            att_inline =>   FALSE,
                            att_filename => AttachmentName);

   EXCEPTION
      WHEN Attachment_Too_Large THEN
      DBMS_OUTPUT.PUT_LINE('Dosya gönderimi başarız : Dosya boyutu aşımı');
  
END;
/

 

Dosyanızı e-posta eki olarak aşağıdaki gibi gönderebilirsiniz :

 

EXEC send_email('filename.txt', 'filename.txt','from@mail.com','to@mail.com','Mail Subject','Mail message') 

 

32K’dan daha büyük bir dosya göndermeye çalışırsanız, ORA-21560 hatası alırsınız. 

*
ERROR at line 1:
ORA-21560: argument 2 is null, invalid, or out of range
ORA-06512: at "SYS.DBMS_LOB", line 1090
ORA-06512: at "SYS.SEND_EMAIL", line 20
ORA-06512: at line 1

 

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Lütfen captcha kodunu giriniz *

Lütfen Resimdeki Kodu Boşluğa Giriniz.