Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Koray Kırdinli
Koray Kırdinli
http://koraykirdinli.wordpress.com
İletişme geçmek için tıklayın.
10 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: execute gonderme job mail oracle package script sqlplus trunc utl Kodlama Koray Kırdinli
 
YAZI HAKKINDA
Türü : Serbest Köşe (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : İleri
Kategori : Kodlama
Yayınlanma Tarihi : 18.11.2009
Okunma Sayısı : 24494
Yorum Sayısı : 1     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 27.12.2024
Turhal Temizer
Mac OS/X Removing CUDA 27.12.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 27.12.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 27.12.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
Oracle ile mail gönderme UTL_MAIL.SEND fonksiyonu
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon

Bu makalemizde web sitelerinde sıklıkla başvurduğumuz bir konu olan mail gönderme işlemlerini ele alacağız.Mail gönderme işlemi .NET te System.Net.Mail; sınıfı ile çok kolay bir şekilde yapılabilmekte ancak bu işlemi uygulamamız üzerinde değil de veritabanında halletmek istiyorsak ve Oracle kullanıyorsak UTL_MAIL.SEND fonksiyonunu kullanmak mantıklı olacaktır.Özelikle belli zamanlarda sistemi yormadan bütün kullanıcılara mail atma işini veritabanı tarafında çözmek akılcı bir çözüm olacaktır. Bunu bir procedür yapıp job’a bağladığımızda istediğimiz saatte istediğimiz kullanıcılara atacak şekilde düzenleyebiliriz.

Oracle’da UTL_MAIL package’ı default olarak gelmemekte ve kendimiz bu package’ı eklemek durumundayız. Bu package’ı kullanılabilir hale getirme için yapmamız gerekenler :
 
Başlat-Çalıştır-cmd

Daha sonra C:> dizinine gelinir ve

C:>sqlplus sys as sysdba yazılarak sql programı çalıştırılır.

ve veritabanına admin olarak bağlanılır.

*** Sqlplus sorgularımızı çalıştırabileceğimiz bir arayüz.Siz bunun için farklı bir araçtan da faydalanabilirsiniz.

 

SQL> start C:oracleproduct10.2.0db_1RDBMSADMINutlmail.sql

package ve synonim yaratılır

SQL> start C:oracleproduct10.2.0db_1RDBMSADMINprvtmail.plb

Package body yaratılır.

Bu işlemleri illaki komut komut satırında yapmak zorunda değiliz Bu package’ın scriptlerini belirtilen dizinden
bulup Toad’tan da çalıştırabiliriz.Yaratıldığından emin olmak için SYS şeması altında Package’lara bakabiliriz.
 
Daha sonra  smtp_out_server ‘ın mail serverını set etmemiz gerekiyor. Bunun içinde aşağıdaki scripti çalıştırmalıyız.

alter system set smtp_out_server = mailserverIP:25' scope=both;

 

Bunu da yaptıktan sonra artık bu package’ı kullanacak userımıza hak vermemiz gerekiyor.Onu da aşağıdaki script ile verebiliriz.

grant execute on sys.utl_mail to Username;

 Mail göndermeyi denemek için şunu yapabiliriz :

EXEC UTL_MAIL.SEND(Gönderen Maili','Alıcı Maili' ,NULL,NULL,'Subject','Mesaj' , 'text/plain; charset=us-ascii',NULL);

Çalışmıyorsa muhtemelen haklardan veya mail server ile alakalı bir problem olabilir.
 
Şimdi daha gerçekçi bir örnek yapalım.Örneğin Kullanıcı tablomuz olsun ve tabloda mail adresleri bulunsun. Bizden de kullanıcılara aylık bir bilgilendirme maili atmamız istendi diyelim.Bunu yapabilmek için once bir prosedür oluştururuz ve bu prosedür kullanıcı tablosundaki mail adreslerini toparlar.Bu mailin belirli tarihlerde atılmasını sağlamak için de Oracle JOB tanımlarız. Prosedür Scriptimiz

CREATE OR REPLACE PROCEDURE SEND_MAIL1 IS
    pRecipient VARCHAR2(2500) := '';
    pSubject   VARCHAR2(100) := ' HATIRLATMA';
    pMessage   VARCHAR2(100) := 'BİZİ UNUTMAYIN‘;
    crlf      CONSTANT VARCHAR2(2):= CHR(13) || CHR(10);
    mesg      VARCHAR2(5000) := ' ';
BEGIN
    for xtable in (select email from kullanici WHERE OTHER=1) loop
     pRecipient :=  pRecipient || xtable.EMAIL || ';';
    end loop;
   mesg := 'Date: ' ||
        TO_CHAR( SYSDATE, 'dd Mon yy hh24:mi:ss') || crlf ||
           'From: ' || crlf ||
           'Subject: '|| pSubject || crlf ||
           'To: '||pRecipient || crlf || '' || crlf || pMessage;
  
   UTL_MAIL.SEND([email protected]’,pRecipient ,NULL,NULL,pSubject,mesg , 'text/plain; charset=us-ascii',NULL);
END;
 
JOB SCRİPTİMİZ : Bu scripti TOAD arayüzü üzerinden de create edebilirsiniz.
BEGIN  SYS.DBMS_JOB.REMOVE(41); COMMIT; END;
DECLARE X NUMBER;
BEGIN
  SYS.DBMS_JOB.SUBMIT
  ( job       => X
   ,what      => 'SEND_MAIL1;'
   ,next_date => to_date('01.06.2009 00:00:00','dd/mm/yyyy hh24:mi:ss')
   ,interval  => 'TRUNC(LAST_DAY(SYSDATE)) + 1'
   ,no_parse  => FALSE);
  SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
  SYS.DBMS_JOB.BROKEN
   (job    => X,broken => TRUE);
COMMIT; END;

Sonuç olarak programlama tarafına hiç bir yük getirmeden veritabanına mail atma görevini yıkmayı başardırk.Yapması biraz zahmetli olsa da gayet kullanışlı.
Umarım Yararlı Olmuştur.Herkese iyi günler dilerim.

 

Makale:
Oracle ile mail gönderme UTL_MAIL.SEND fonksiyonu Kodlama Koray Kırdinli
  • Yazılan Yorumlar
  • Yorum Yaz
OCA
13
2010
Paylaşım için teşekkür ederim.
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor