Hurriyet

13 Ocak 2014 Pazartesi

Oracle Veritabanı: Veritabanından PL\SQL ile Mail Göndermek - Sending Mails With PL\SQL From The Oracle Database

Oracle veritabanından tarafımıza veya 3.bir kişiye mail attırmak istediğimizde bunun için kullanabileceğimiz standart bir paket vardır. UTL_SMTP paketiyle istediğimiz maili hazırlayabiliriz. Bunun için çeşitli hazır taslaklar vardır. Mail bağlantısının açılması ve kapanması, gerekli kişi, adres ve mesaj bilgileri de girildiğinde geriye sadece mesajın body kısmını doldurmak gerekir.  O yüzden standart taslaklardan herhangi birisini kullanarak aşağıda vereceğimiz kodlardan herhangi birisi ile mail atabiliriz.

Örnek:

Bu örneğimizde e_mail_message adlı procedure'ımızda 4 tane parametre verip  bu parametreleri kullanaraktan istediğimiz kişi ye mail attırırız. 4 parametre istesek de, biz kolaylık olsun diye bunları parametre vermeden program başlamadan bunları belirleriz.

Bunları ayarlarken en önemli işlem l_mailhost parametresinin ayarlanmasıdır. Bu parametre email sunucusunu işaret eder. Eğer bu yanlış olursa programımız çalışmaz.

l_from parametresi mailin kimden geldiğini açıklar. Gerçek bir mail adresi verilmek zorunda değildir; ancak tanımlayıcı olmalıdır. Örnek olarak kullanıcı@makine_adı şeklinde bir formulasyon yapılabilinir.

l_to parametresi mail kime gönderilecekse ona set edilir.

l_subject parametremiz mailin konusunu set eder.

l_mail_conn mail bağlantısını ifade eden standart olarak kullanılan bir parametredir.

Eğer aşağıda verdiğimiz parametreleri kullanmak istemezseniz ":='parametre_degeri'" ni silebilirsiniz. Yani sadece örnek olarak l_mailhost varchar2(64) kalacak şekilde bırakılabilinir. Sonra da procedure çağırılırken
program adının yanında parametre olarak verilir.

 create or replace procedure    
  e_mail_message    
     
  (    
     
   from_name varchar2,   
   to_name varchar2,   
   subject varchar2,   
   message varchar2   
  )   
  is   
     
  l_mailhost VARCHAR2(64) := 'smtp_host_adı';   
  l_from  VARCHAR2(64) := 'abc@abc.com.tr';   
  l_to   VARCHAR2(64) := 'berke.oz@abc.com.tr';   
  l_subject  VARCHAR2(64) := 'deneme';   
  l_mail_conn UTL_SMTP.connection;   
  BEGIN   
  l_mail_conn := UTL_SMTP.open_connection(l_mailhost, 25);   
  UTL_SMTP.helo(l_mail_conn, l_mailhost);   
  UTL_SMTP.mail(l_mail_conn, l_from);   
  UTL_SMTP.rcpt(l_mail_conn, l_to);   
     
  UTL_SMTP.open_data(l_mail_conn);   
     
  --Konu ve To kısmı bu bölümde atandığı için aşağıdaki kısım önemlidir.  
  UTL_SMTP.write_data(l_mail_conn, 'Date: ' || TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') || Chr(13));   
  UTL_SMTP.write_data(l_mail_conn, 'From: ' || l_from || Chr(13));   
  UTL_SMTP.write_data(l_mail_conn, 'Subject: ' || l_subject || Chr(13));   
  UTL_SMTP.write_data(l_mail_conn, 'To: '  || l_to || Chr(13));   
  UTL_SMTP.write_data(l_mail_conn, ''   || Chr(13));   
     
  FOR i IN 1 .. 10 LOOP   
   UTL_SMTP.write_data(l_mail_conn, 'This is a test message. Line ' || To_Char(i) || Chr(13));   
  END LOOP;   
     
  UTL_SMTP.close_data(l_mail_conn);   
     
  UTL_SMTP.quit(l_mail_conn);   
  END;   
  / 

Mail Procedure'unu Elle Çalıştırmak:

Burada da yukarıdaki parametrelere sadık kalaraktan  mail procedure'umuz çalıştırabiliriz.

exec send_mail('abc@abc.com.tr','berke.oz@abc.com.tr','Deneme','ABC123'); 


Hiç yorum yok:

Yorum Gönder