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