Veritabanı yöneticileri veya yazılım geliştiriciler olarak sistemlerimizin bizimle konuşmasını isteriz. Stokların kritik seviyeye düşmesi, planlanmış bir yedekleme işinin (Job) hata vermesi, yeni bir üyelik aktivasyonu veya bir müşterinin sipariş vermesi gibi durumlarda anlık bilgilendirme mailleri hayati önem taşır.
SQL Server, Database Mail mimarisi sayesinde harici bir uygulamaya ihtiyaç duymadan, doğrudan T-SQL kodları veya SQL Server Agent üzerinden e-posta göndermemize olanak tanır.
Bu rehberimizde, SQL Server üzerinden e-posta gönderim altyapısını sıfırdan nasıl kuracağınızı ve dinamik e-postaları nasıl hazırlayacağınızı adım adım inceliyoruz.
Yol Haritamız:
- SQL Server'da Database Mail Özelliğini Aktif Etme (Enable)
- Arayüz (GUI) ile Yeni Profil ve SMTP Hesabı Oluşturma
- Database Mail ile İlk Test Mailini Gönderme
- Mail Durumlarını ve Log Kayıtlarını İnceleme
sp_send_dbmailProsedürü ile Dinamik Mail Gönderme Örnekleri (Text & HTML)- SQL Server'daki Mail Ayarlarını T-SQL ile Listeleme
1. SQL Server'da Database Mail Nasıl Aktif Edilir?
SQL Server'da güvenlik yapılandırmaları gereği Database Mail bileşeni varsayılan olarak kapalı gelir. Eğer aktifleştirmeden mail göndermeye çalışırsanız, sistem size Database Mail XPs bileşeninin kapatıldığına dair bir güvenlik engeli hatası verecektir.
Bu özelliği etkinleştirmek için SQL Server Management Studio (SSMS) üzerinde yeni bir sorgu penceresi açıp aşağıdaki T-SQL kod bloklarını çalıştırmanız yeterlidir:
SQL
2. Arayüz Kullanarak Yeni Profil ve SMTP Hesabı Oluşturma
Sistemimizin e-posta gönderebilmesi için arka planda bir SMTP sunucusuna, bu sunucuya erişecek bir hesaba ve bu hesapları kapsayan bir profile ihtiyacı vardır.
Önemli Not: İşlemlere başlamadan önce SQL Server Agent servisinizin bilgisayarınızda veya sunucunuzda "Running" (Çalışıyor) durumunda olduğundan emin olun.
Adım Adım Kurulum:
- Object Explorer panelinden sırasıyla Management -> Database Mail klasörüne gelin. Sağa tıklayarak Configure Database Mail seçeneğini seçin.
- Karşınıza çıkan sihirbaz penceresinde Next butonuna basarak ilerleyin.
- Set up Database Mail by performing the following tasks seçeneğini işaretleyip devam edin (Bu seçenek sıfırdan yeni profil ve hesap kurmanızı sağlar).
- New Profile ekranında profilinize bir ad (Örn: Medium SQL Server Mail) ve açıklama yazın. Ardından hemen altta bulunan Add... butonuna tıklayarak ilişkili SMTP hesabını oluşturmaya başlayın.
- New Database Mail Account ekranını SMTP servis sağlayıcınızın (Gmail, Outlook veya Şirket SMTP sunucunuz) bilgilerine göre doldurun:
- Email Address: Mailin gönderileceği asıl adres.
- Display Name: Alıcının gelen kutusunda göreceği isim (Örn: Sistem Bildirimleri).
- Server Name: SMTP sunucu adresi (Örn:
smtp.gmail.com). - Port Number: Genellikle
587veya SSL için465. - Kimlik Doğrulama (Authentication): Temel kimlik doğrulamayı seçerek mail adresinizi ve şifrenizi girin. *(Eğer Gmail kullanıyorsanız ve 2 Adımlı Doğrulama aktifse, buraya normal şifrenizi değil Google Hesap ayarlarından alacağınız "Uygulama Şifresi"*ni girmelisiniz).
- Hesabı ekledikten sonra profil penceresine geri döneceksiniz. Next diyerek ilerleyin. Karşınıza gelen pencerede profilinizi Public (Herkese Açık) veya Private (Kişiye Özel) yapabilirsiniz. Genel sistem bildirimleri için Public yapıp işaretlemeniz önerilir.
- Sonraki adımları varsayılan ayarlarla geçip Finish butonuna basarak sihirbazı tamamlayın. Tüm adımların karşısında Success yazısını gördüyseniz kurulum başarıyla tamamlanmıştır.
3. Database Mail ile İlk Test Mailini Gönderme
Yaptığımız ayarların doğru çalışıp çalışmadığını test etmek oldukça kolaydır.
- Database Mail klasörüne tekrar sağ tıklayın ve bu kez Send Test E-Mail... seçeneğini seçin.
- Açılan pencerede Database Mail Profile kısmından az önce oluşturduğunuz profili seçin.
- To: kısmına kendi kişisel mail adresinizi yazın, test başlığı ve içeriği ekleyip Send Test E-Mail butonuna basın.
Mailiniz başarıyla kuyruğa gönderilecektir. Şimdi gelen kutunuzu kontrol edebilirsiniz!
4. Mail Log Kayıtlarına Nasıl Bakılır?
Eğer test mailiniz gelen kutunuza ulaşmadıysa veya ilerleyen süreçlerde maillerin gidip gitmediğinden şüphelenirseniz, SQL Server'ın tuttuğu log kayıtlarını inceleyebilirsiniz.
Database Mail klasörüne sağ tıklayıp View Database Mail Log seçeneğine tıkladığınızda açılan ekranda, gönderilemeyen maillerin altında yatan sunucu ve port tabanlı hataları detaylıca görebilir, buna göre aksiyon alabilirsiniz.
5. sp_send_dbmail Prosedürü ile Kod Üzerinden Mail Gönderme
Arayüzle uğraşmadan, doğrudan yazdığınız scriptlerin, trigger'ların veya job'ların içerisinden mail tetiklemek için msdb.dbo.sp_send_dbmail sistem saklı yordamını (stored procedure) kullanırız.
Sık kullanılan parametreleri şunlardır:
@profile_name: Maili gönderecek profilin adı.@recipients: Alıcıların mail adresleri (Birden fazla ise araya;konur).@subject: Mailin konusu.@body: Mailin içeriği.@body_format: İçeriğin türü (TEXTveyaHTML).
Örnek 1: Düz Metin (TEXT) Formatında Dinamik Şifre Gönderimi
Aşağıdaki örnekte veritabanındaki bir müşterinin bilgilerini çekerek ona özel tek kullanımlık bir aktivasyon kodu üretiyor ve düz metin olarak gönderiyoruz:
SQL
Örnek 2: HTML ve CSS Tasarımlı Profesyonel Mail Gönderimi
Alıcıya çok daha şık, kurumsal bir e-posta ulaştırmak istiyorsak @body_format = 'HTML' parametresini kullanarak inline CSS ile zenginleştirilmiş HTML tasarımları gönderebiliriz:
SQL
Hatta bu HTML yapısını daha da genişleterek içerisine veritabanından çektiğiniz sipariş detaylarını bir <table> içerisine basabilir, şirket logonuzu veya ürün görsellerinizi <img src="..."> etiketleriyle mail gövdesine ekleyebilirsiniz.
6. Mevcut Mail Ayarlarını T-SQL ile Sorgulama
Veritabanında daha önceden hangi profillerin tanımlandığını, hangi hesapların hangi SMTP sunucularını kullandığını arayüzleri tek tek açmadan, sistem tablolarına msdb veritabanı üzerinden doğrudan sorgu atarak öğrenebilirsiniz.
Tanımlı Profilleri Listeleme:
SQL
Tanımlı SMTP Hesaplarını Listeleme:
SQL
Hangi Profilin Hangi Hesabı Kullandığını Görme:
SQL
SMTP Sunucu ve Port Bilgilerini Görme:
SQL
Özet
SQL Server üzerinde Database Mail yapılandırmasını tamamladıktan sonra süreç tamamen sizin yaratıcılığınıza ve iş ihtiyaçlarınıza kalıyor. İster otomatik raporlama sistemleri kurun, ister kritik veri değişimlerinde anlık uyarı mekanizmaları (Trigger tabanlı) geliştirin; sp_send_dbmail iş yükünüzü hafifletmek için her zaman elinizin altında olacaktır.
Sorularınızı ve karşılaştığınız hataları yorumlar kısmında paylaşabilirsiniz. Güvenli ve stabil veritabanları dilerim!