Burak IŞIKLI :))

SQL Server 2008 Kullanılarak E-posta Göndermek

Posted in SQL Server by Burak IŞIKLI on 15 Şubat 2009
SQL Server kullanarak e-posta nasıl gönderilecek bunu anlatacağım. SQL Server 2000 mail gönderme sistemine sahipti fakat mail gönderebilmek için mutlaka MAPI alt yapısına sahip bir sistem hazırlamamız şarttı. Bu yapı aynen SQL Server 2005’de de tüm özellikleriyle korunuyor. Ancak gerekli hatta olmazsa olmaz diyebileceğimiz geliştirme geldi ve Database Mail isimli yeni bir mail gönderme sistemi SQL Server 2005’e eklendi. En önemli özelliklerinden biri artık MAPI alt yapısına ihtiyaç duymadan herhangi bir SMTP sunucu tanımlanarak gönderim yapılabiliyor. Bunun anlamı gmail hesabınızı sisteme tanımlayarak SQL Server 2005 üzerinden mail gönderebileceğinizdir.
Güvenilirlik :
Database Mail, önemli özelliklerinden biri olarak ön plana çıkan Simple Mail Transfer Protocol (SMTP) kullanabilme yeteneği ile göz doldurduğu kadar mail gönderme işleminin SMTP sayesinde SQL Server’dan ayrılmış olması ile güvenilirliği de artırmıştır. Bu sayede mail gönderme işlemi sırasında SQL Server 2005 çok daha az kaynak kullanarak performans kaybı yaşamayacak, herhangi bir dış kaynaklı sorundan ise etkilenmeyecektir. Yine Database Mail sisteminin gelişmiş özelliklerinden biri de SMTP sunucusunda oluşan herhangi bir sorunda gönderilecek mailleri beklemeye alıp SMTP sunucusundaki sorun giderildikten sonra tekrar gönderebilmesidir. Ayrıca bir Database Mail profili birden fazla SMTP sunucusu barındırabilir. Böylece kullanım dışı bir SMTP sunucusu varsa tanımlı diğer SMTP sunucuları üzerinden mail gönderimi yapılabilir. İlginç bir diğer özellik ise HTML formatında mail gönderebilmeniz.
Kurulum ve Tanımlar :
Şimdi biraz Database Mail i yakından tanıyalım ve sonra diğer özelliklerine geçelim.


Object Explorer üzerinde görüldüğü gibi Database Mail, Management başlığı altına konumlandırılmış. SQL 2000’den aşina olduğumuz MAPI tabanlı SQL Mail sistemi ise yine aynı başlık altında Legacy (= miras) isimli alt başlık içerisine eklenmiş. Eklendiği yerin ismi gibi gerçekten SQL 2000’den miras kaldı…


Database Mail üzerine sağ tuşla kliklediğimizde açılan menüden ulaşabileceğimiz Configure Database Mail sihirbazına yine Database Mail üzerine çift tıklayarak da ulaşabiliyoruz.
Açılan sihirbaz basitçe bir profil tanımlayarak bu profil için SMTP sunucuları tanımlamanızı kolaylaştırıyor.

En üstteki seçenekle devam ettiğimizde profil tanımlaması yapabileceğimiz ve bu profile SMTP sunucuları tanımlayabileceğimiz ekran açılıyor. Öncelikle bir profil ismi girip açıklama bilgilerini doldurmamız yararlı olacaktır.
Profil tanımlamalarını yaptıktan sonra ise SMTP accounts: bölümünden Add -> New Account tuşu ile SMTP sunucularını ekliyoruz. SMTP sunucularını eklerken bir isim verdikten sonra Outlook Express benzeri bir tanımlama ekranıyla SMTP sunucu adresini, kullanıcı adı ve şifreyi gerekli alanlara giriyoruz.

Birkaç SMTP sunucusu tanımladıktan sonra bunların önceliklerini de seçili sunucunun sırasını değiştirerek ayarlayabiliyoruz. Özellikle dikkat edeceğiniz nokta tanımlama yaparken Gmail gibi sunucularda “This server requires a secure connection(SSL)” işaretli olması gerekmektedir. Bunu öğrenmek için kullandığınız sunucunun bu özelliği destekleyip desteklemediğine bakmanız gerekmektedir. Eğer bu özelliği destekleyip siz kullanmazsanız e-posta göndermede “kullanıcı geçersiz” hatası alırsınız.

İşleme devam ettiğimizde aşağıdaki gibi sistem parametrelerini değiştirebileceğimiz bir yönetim ekranı açılacaktır. Burada gerekli ayarları da yaptıktan sonra SQL Server 2008’in profilimizi oluşturması ve accountları tanımlaması için devam edebiliriz.

Tüm bu işlemlerin ardından profilimiz oluşturulacak ve SMTP hesapları bu profille ilişkilendirilecektir.

Ölçeklenebilirlik :
Database Mail eş zamanlı olarak ve/veya arka planda çalışarak mail gönderme işlemlerini yapar. sp_send_dbmail stored procedure çağrıldığında Database Mail, Service Broker bekleme listesine bir istek sırası ataması yapar. Ardından stored procedure işletilerek dış mail sunucusuna istek gönderilir ve mail teslim edilir.
Çoklu profil desteği sayesinde birden fazla profil tanımlanabilir ve istenilen profil stored procedure parametresiyle belirlenerek mail gönderilebilir. Yine aynı şekilde çoklu SMTP hesabı desteğiyle bir profile birden fazla SMTP sunucusu tanımlanabilir. SMTP hesapları ve profiller birbirlerinden ayrı değerlendirildiği için aynı SMTP hesapları farklı profiller için kullanılabilir durumdadır.
Güvenlik :
Öntanımlı olarak Database Mail kullanımı kapalıdır. Bu yüzden Database Mail’i kullanabilmek için SQL Server Surface Area Configuration aracı kullanılarak Database Mail stored procedure kullanıma açılmalıdır.
Ancak daha önceden bahsettiğimiz gibi SQL Server 2008’de Surface Area Configuration aracı facet altındadır. Policy Management -> Facet -> Surface Area Configuration gelip sağ tıklayıp properties seçiyoruz.

Database Mail gönderebilmek için kullanıcının DatabaseMailUserRole isimli veritabanı kullanıcı tanımına üye olması gerekir. Ayrıca profil güvenliği de mevcuttur. Buna göre tanımlayacağınız Database Mail profillerinden public olarak ayarlanan profil tüm msdb veritabanı kullanıcıları tarafından mail göndermek için kullanılabilecektir. Public olarak tanımlanmamış tüm diğer profillere ise ayrıntılı kullanıcı güvenlik ayarları tanımlanabilir.
Database Mail ile gönderilecek dosya boyutuna sınırlama getirilebilir. Bu konuda aktif bir yönetim sistemi bulunuyor. Yine gönderilecek dosyalarda uzantı sınırlaması da yapılabilir.
Kullanım :
Database Mail kullanımı sp_send_dbmail isimli stored procedure aracılığıyla yapılabiliyor. Kullanımı xp_sendmail yapısına benzemekle birlikte bir çok ek parametre desteklenmiş. Aşağıda tam bir sytax ve örnek bir kullanımı bulunuyor.

DECLARE @email nvarchar(50)
DECLARE emailCursor CURSOR FOR
SELECT email FROM deneme;
OPEN emailCursor;
FETCH NEXT FROM emailCursor INTO @email
WHILE (@@FETCH_STATUS = 0)
BEGIN
EXEC msdb.dbo.sp_send_dbmail@profile_name='deneme',
@recipients=@email,@body='deneme',@body_format='HTML',
@subject='deneme';
FETCH NEXT FROM emailCursor INTO @email
END
CLOSE emailCursor
DEALLOCATE emailCursor
GO

Bu kadar basit bir olay. Database Mail seçeneğine gelip “Send Test E-mail” tıklayarak sistemin çalışıp çalışmadığını kontrol edebilirsiniz…

Tagged with: , , , ,

2 Yanıt

Subscribe to comments with RSS.

  1. Marco Costa said, on 15 Şubat 2009 at 3:03

    Excellent blog!

  2. […] these article before. You can read SQL Server Agent Service on this link and Database Mail on this link SQL Server Agent Service is based job schedule. To remember birthday your job is […]


Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: