UTL_SMTP ile Oracle Üzerinden E-Mail Gönderme

Bu yazımda UTL_SMTP paketini kullanarak Oracle üzerinden bir email gönderme örneği paylaşacağım. Bu paylaşımdan önce SMTP hakkında biraz bilgi vereceğim.

SMTP(Simple Mail Transfer Protocol): Basit E-Posta Gönderme Protokolü olarakta türkçeleştirebileceğimiz SMTP, e-mail göndermek için server client arasındaki bağlantıyı sağlayan bir anlaşma dili olarak ifade edebiliriz. Bu protokol 25 numaralı portu kullanır ve haberleşmeyi bu port üzerinden gerçekleştirir. Clientdan gelen isteği, gerekli authentication işlemlerinden  geçirerek kimlik  doğrulama gerçekleştiğinde  ilgili postayı istenen adrese gönderme işlemini yapar. Outlook ve Thunderbird gibi büyük ölçekli e-posta sağlayıcıları bu protokolü kullanmaktadır.

Oracle üzerinden’de SMTP protokolünü kullanarak e-mail göndermek mümkün. Bunun için utl_smtp’den faydalanmak yeterli olacaktır. Aşağıdaki örnekte utl_smtp kullanarak db üzerinden e-mail atma işlemi gerçeklenmiştir.

DECLARE
sender VARCHAR2 (100) := ’emrah.mete@abc.com’;
subject VARCHAR2 (100) := ‘deneme’;
receiver VARCHAR2 (100) := ’emrahmete@1234.com’;

email_content CLOB
:= ‘The Oracle b-tree index The oldest and most popular type of Oracle indexing
is a standard b-tree index, which excels at servicing simple queries.
The b-tree index was introduced in the earliest releases of Oracle and remains
widely used with Oracle.B-tree indexes are used to avoid large sorting operations.
For example, a SQL query requiring 10,000 rows to be presented in sorted order will often use
a b-tree index to avoid the very large sort required to deliver the data to the end user’;

smtp_server VARCHAR2 (14) := ‘SMTP SERVER ADRESS YAZILACAK’;
smtp_port NUMBER := ‘SERVERIN ,KULLANDIĞI PORT NUMARASI YAZILMALI’;
connection UTL_SMTP.connection;
BEGIN
connection := UTL_SMTP.open_connection (smtp_server, smtp_port);
— Connection Aciliyor
UTL_SMTP.helo (connection, smtp_server);
UTL_SMTP.mail (connection, sender);
UTL_SMTP.rcpt (connection, receiver);
UTL_SMTP.open_data (connection);
UTL_SMTP.write_data (connection, ‘Subject: ‘ || subject || UTL_TCP.crlf);
UTL_SMTP.write_data (connection,
‘Content-Type: text/html; charset=”ISO-8859-9″;’
|| UTL_TCP.crlf
);
UTL_SMTP.write_data (connection,email_content);
UTL_SMTP.close_data (connection);
UTL_SMTP.quit (connection);
END;

Yukarıdaki kod içerisinde server ile ilgili alanları doldurduktan sonra çalıştırmak veritabanı üstünden e-mail gönderme işlemini gerçekleştirecektir.

Veritabanı üstünden e-mail gönderebilme yeteneği,  üst seviye bir programlama dili (java, C#,..) ile geliştirdiğimiz uygulamalarda bize hız ve performans kazandıracaktır. Boş yere db ile application arasında data transferi gerçekleştirmeden uygun paramatereleri db ye pass ederek mail gönderme işlemini db tarafında hızlıca çözmüş olacağız.

Advertisements

About ... from Emrah METE

Bilgisayar Mühendisi
This entry was posted in Oracle, Uncategorized and tagged , , , , , , , , , , . Bookmark the permalink.

7 Responses to UTL_SMTP ile Oracle Üzerinden E-Mail Gönderme

  1. always i used to read smaller posts that also clear their
    motive, and that is also happening with this paragraph which
    I am reading at this time.

  2. Bünyamin CAMGÖZ says:

    Hocam merhaba, mail atma olayını anladım ama bir maili sabit 3 kişiye göndermek için ne yapmak gerekiyor. Yani
    receiver VARCHAR2 (100) := ‘emrahmete@1234.com’||emrahmete@1234567.com şekl,nde iki kişiye veriyi aynı anda göndermenin bir yolu var mı? teşekkürler

    • reciever kısmını noktalı virgül ile ayırıp birden çok kullanıcıya gönderebilirsiniz.

      receiver VARCHAR2 (100) := ‘emrahmete@1234.com;emrahmete@1234567.com’;

      • Bünyamin CAMGÖZ says:

        hocam merhaba,

        İlgili kod aşağıdadır.
        v_mail_address := ’emrahmete@1234.com;emrahmete111@1234.com’;
        send_mail(v_file_name, v_subject, v_mail_address,NULL,1);
        kodu bu şekilde yazdığım zaman mail gitmiyor.
        Ama sadece
        v_mail_address := ’emrahmete111@1234.com’;
        şeklinde yazdığım zaman herhangi bir hata almadan mailimi gönderebiliyorum. nerede hata yapıyorum acaba. iyi çalışmalar.

      • rlist(1) := ’emrah@emrah.com’;
        rlist(2) := ’emrah1@emrah.com’;

        FOR i IN rlist.FIRST .. rlist.LAST
        LOOP
        utl_smtp.Rcpt(v_Mail_Conn, rlist(i));
        END LOOP;

        şeklinde çalışıyor. Deneyebilirsiniz.

      • Bünyamin CAMGÖZ says:

        emrah hocam merhaba,
        create procedure deneme(a number, b in out number, c in out number); şeklinde yazılan bir procedure’den aşağıdaki gibi select’i nasıl yapabiirim.

        select deneme(a_degeri,b_degeri,c_degeri) from bılabıla;

      • Prosedür ile bu tarz bir işlem yapımıyor diyebiliyorum bu tarz bir işlemi fonksyon ile çözebilirsin.

        CREATE OR REPLACE FUNCTION emmt.fden (a NUMBER, b NUMBER, c NUMBER)
        RETURN NUMBER
        IS
        BEGIN
        RETURN 1;
        END;

        select fden(1,2,3) from dual;

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s