ORACLE ile mail atmak için aşağıdaki yöntemi izleyebilirsiniz. Size attachment'li mail atma desteği verecektir.
CREATE OR REPLACE PROCEDURE smtp_att_mail (
pin_table_name IN VARCHAR DEFAULT 'CRE_OR_DEL_OBJECT'
)
IS
--gönderen kısmında yazacak olan yaz bu alan gecerli olmak zorunda değildir.
v_from VARCHAR2 (80) := 'OBJE.BILGILERI@aliates.com';
v_recipient VARCHAR2 (80) := 'aliatesh@hotmail.com';
v_subject VARCHAR2 (80) := 'olusan ve silinenler nesneleri listeler.';
v_mail_host VARCHAR2 (30) := 'mailserver';
v_mail_conn UTL_SMTP.connection;
crlf VARCHAR2 (2) := CHR (13) || CHR (10);
--mesaj VARCHAR2 (4000) NULL;
--dosyamızın içerisinde yazacakları bir değişkende topluyorum.
--burada VARCHAR2 kullandım ama long da kullanılabilinir.
mesaj VARCHAR2 (30000) := '||';
BEGIN
--burada tabloyu değişkene aktarıyorum.
--dikkat etmek gereken konu burada mail içeriğine uygun olması gerektiğidir.
--bunun için biraz denemeler yapmaız gerekebilir.
--ben substr ile istemediğim alanları kesitim. Siz daha orijinal bir çözüm üretirsiniz artık.
FOR i IN (SELECT *
FROM user_objects where rownum<10)
LOOP
mesaj :=
mesaj
|| ''
|| i.owner
--burada ";" kullanıyorum ki Excell bunu otomatik olarak algılasın ve sütün sütün göstersin.
--bu parametreyi control panelden de değiştirenbiliyorsunuz. isterseniz burada "|" yada "," kullanabilirsibiz.
|| ';'
|| i.object_name
|| ';'
|| i.object_type
|| ';'
|| i.status
|| crlf;
END LOOP;
mesaj := SUBSTR (mesaj, 3, (LENGTH (mesaj) - 2));
--burada 25. portu kullanarak mail gönderme parametlerini veriyorum.
v_mail_conn := UTL_SMTP.open_connection (v_mail_host, 25);
UTL_SMTP.helo (v_mail_conn, v_mail_host);
UTL_SMTP.mail (v_mail_conn, v_from);
UTL_SMTP.rcpt (v_mail_conn, v_recipient);
UTL_SMTP.rcpt (v_mail_conn, 'aliatesh@hotmail.com');
--buraya birden fazla mail adresi ekleyebiliriz.
--bu fonksiyon için parametre alan bir dongu yazılabilir.
UTL_SMTP.rcpt (v_mail_conn, 'aliatesbilgisayar@yahoo.com');
--Mail içeriği burada aslında
UTL_SMTP.DATA
(v_mail_conn,
'Date: '
|| TO_CHAR (SYSDATE, 'Dy, DD Mon YYYY hh24:mi:ss')
|| crlf
|| 'From: '
|| v_from
|| crlf
|| 'Subject: '
--başlığımızı belirtiyoruz.
|| v_subject
|| crlf
--burada TO : yazmasını istediğimiz yazıyoruz.
--dongu ile buraya otomatik parametre eklenebilir.
|| 'To: adi bende sakli'
|| crlf
|| 'MIME-Version: 1.0'
|| crlf
||
'Content-Type: multipart/mixed;'
|| crlf
|| ' boundary="-----SECBOUND"'
|| crlf
|| crlf
|| '-------SECBOUND'
|| crlf
--içeriğin tipinide burada girdik.
|| 'Content-Type: text/plain;'
|| crlf
|| 'Content-Transfer_Encoding: 7bit'
|| crlf
|| crlf
|| 'Bu bir bilgilendirme mailidir. Günlük olarak silinen ve yeni olusturulan database objelerini bildirir.'
|| crlf
--mesaj içerisinde yazmak istediğiklerimiz.
||
'Dosya ektedir Bilginize'
|| crlf
|| crlf
|| '-------SECBOUND'
|| crlf
|| 'Content-Type: text/plain;'
|| crlf
|| ' name="excel.csv"'
|| crlf
|| 'Content-Transfer_Encoding: 8bit'
|| crlf
|| 'Content-Disposition: attachment;'
|| crlf
--oluşan dosyaya vereceğimiz isim.
|| ' filename="silinen_olusan.csv"'
|| crlf
|| mesaj
|| crlf
|| '-------SECBOUND--'
);
UTL_SMTP.quit (v_mail_conn);
EXCEPTION
WHEN UTL_SMTP.transient_error OR UTL_SMTP.permanent_error
THEN
raise_application_error (-20000, 'Unable to send mail: ' || SQLERRM);
END;
/
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment