SQL Server

SQL Server Database Mail ve Gmail ile Kullanımı

En son yazımızda SQL Backup aldıktan sonra problem olduğunda problem var diye ya da problem olmadan backup aldığında da problem yok diye bilgilendirme yapabiliriz ama bunu sonraki bölümde anlatacağım demiştim.

İşte bu yazıda MSSQL üzerinde mail gönderme işlemi nasıl gerçekleştirilir konusunu anlatıyorum.

Bunun için herşeyden önce SQL Mail konfigürasyonunu yapmamız gerekiyor.

Ben örnek olsun ve herkes rahatça yapabilsin diye basitçe gmail hesabı üzerinden konfigüre edeceğim.

Bunun için management studio da management’ın altında Database Mail>Configure Database Mail menüsüne tıklıyoruz.

Henüz hiçbir kurulum olmadığı için Set up Database Mail fort he first time seçeneğini seçiyoruz.

Database Mail feature default olarak kapalı olduğu için onu açmamız gerekiyor. Yes diyoruz.

Açılan ekranda bir database mail profil oluşturuyoruz. Bunu mail gönderirken kullanacağız. Ben kısaca SQLMAIL diyorum.

Şimdi bir SMTP Account eklememiz gerekiyor. Add diyerek ekliyoruz.

Profili public olarak işaretliyoruz.

Finish diyerek işlemi tamamlıyoruz.

Artık SQL mail kurulumu tamamlandı. Şimdi denemesini yapalım.

Database mail üzerinde send test email diyoruz.

Şimdi deneme için kendimize mail gönderelim.

Mail gönderilmek üzere kuyruğa alındı dedi.

Bakalım gönderebilmiş mi?

Gördüğümüz gibi gönderemedi. Çünkü gmail’in güvenlik ayarları buna izin vermedi ve gmail bana uyarı maili gönderdi. Spam’lerin önüne geçmek için kullanılan bir önlem bu. Muhtemelen kurumsal mail adresinizi kullansanız bu sorunu yaşamayacaksınız.

Açılan ekranda güvenliği düşük uygulama erişimi linkine tıklıyoruz ve

Daha az güvenli uygulamalara izin ver özelliğini açıyoruz. Dediğim gibi bu durum gmail’e özel bir durum. Kurumsal hesaplarda büyük ihtimal sorun yaşanmayacaktır.

Şimdi tekrar deneyelim.

Görüldüğü gibi mail geldi.

Şimdi artık mail gönderebildiğimizi gördük. Şimdi sihirli cümle şu.

“SQL Server SQL dilinden başka bir şeyden anlamaz.”

O zaman bu mail gönderme işini yapan da bir sql kodu olmalı.

O da aşağıdaki gibi arkadaşlar.

Mail geldi.

Gördüğümüz gibi artık SQL ile mail gönderebiliyoruz. SQL Mail ile bir sorgunun çıktısı da gönderilebilir. Ancak biz sql mail’i daha çok özellikle sql server agent tarafındaki işleri kontrol etmek için kullanırız.

Örneğin sistemin backup alınamadığında mail atması, index bittiğinde mail atması gibi sebepler için bolca kullanırız.

Başka bir yazıda görüşmek dileğiyle.

Sağlıcakla…

İlgili Makaleler

16 Yorum

  1. Teşekkürler hocam, içeriklerinizi takip ediyorum, çok katkı sağladınız bana, mongodb ye de girmenizi çok isterim.
    Birazda benim katkım olsun;
    MSSQL express versiyonunda arayüz ile yapılmıyor ancak query ile yapmak mümkün, kendime not olarak almıştım ancak makale yazmaya fırsat bulamamıştım.

    EXECUTE msdb.dbo.sysmail_add_account_sp –sysmail_update_account_sp
    @account_name = ‘MailTest’,
    @email_address = ‘[email protected]’,
    @display_name = ‘MailAdres’,
    @replyto_address = ‘[email protected]’,
    @description = ‘Sent Mail using MSDB’,
    @mailserver_name = ‘smtp.gmail.com’,
    @mailserver_type = ‘SMTP’,
    @port = ‘587’,
    @enable_ssl = 1,
    @username=’[email protected]’,
    @password=’ŞİFRE BURAYA’,
    @use_default_credentials = 0 ;

    EXECUTE msdb.dbo.sysmail_add_profile_sp
    @profile_name = ‘MailTest’,
    @description = ‘Profile used to send mail’

    EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
    @profile_name = ‘MailTest’,
    @account_name = ‘MailTest’,
    @sequence_number = 1

    EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
    @profile_name = ‘MailTest’,
    @principal_name = ‘public’,
    @is_default = 1 ;

    — Kayıları kontrol et
    SELECT *FROM msdb.dbo.sysmail_account
    SELECT *FROM msdb.dbo.sysmail_configuration
    SELECT *FROM msdb.dbo.sysmail_principalprofile
    SELECT *FROM msdb.dbo.sysmail_profile
    SELECT *FROM msdb.dbo.sysmail_profileaccount
    SELECT *FROM msdb.dbo.sysmail_profileaccount

    — mail logları- hata alınınca atar
    SELECT * FROM msdb.dbo.sysmail_log

    — Mail yollama
    exec msdb.dbo.sp_send_dbmail @profile_name = ‘MailTest’,
    @recipients = ‘[email protected]’,
    @subject = ‘Mail Test’,
    @body = ‘Mail Sent Successfully’,
    @body_format = ‘text’

    –HATA ALINIRSA
    sp_configure ‘show advanced options’, 1;
    GO
    RECONFIGURE;
    GO
    sp_configure ‘Database Mail XPs’, 1;
    GO
    RECONFIGURE
    GO

    Gmail güvenliğini direkt açmak için aşağıdaki linke girip evet yapmak yeterli
    https://myaccount.google.com/u/0/lesssecureapps

    Ek olarak html olarak mail örneği de paylaşayım, hatta mail içerisinde tablo örneği de yaptım.
    Not: Html5 etiketleri kullanmamanız iyi olur, çoğu mail clientı desteklemiyor

    declare @sonuc nvarchar(max)
    declare @table nvarchar(max)
    declare @message nvarchar(max)
    declare @date datetime
    declare @ficheno nvarchar(250)
    declare @total float

    set @sonuc=’Sayın Yetkili,‘+
    ‘Örnek bir tablodur,’+
    ”+
    ‘Fiş NoTarihTutar’

    DECLARE testTable CURSOR FOR
    SELECT FICHENO,DATE_,NETTOTAL FROM FATURALAR
    OPEN testTable
    FETCH NEXT FROM testTable into @ficheno,@date,@total
    WHILE @@FETCH_STATUS = 0 BEGIN

    set @table=”+
    ”+isnull(@ficheno,’Fiş Numarası Boş Kontrol Et’)+”+
    ” +isnull(convert(nvarchar(10),@date,104),’Tarih Boş Kontrol Et’)+ ”+
    ” +isnull(cast(@total as nvarchar(10)),’Tutar Boş Kontrol Et’)+ ”+

    set @sonuc=@sonuc+@table
    FETCH NEXT FROM testTable into @ficheno,@date,@total
    END
    CLOSE testTable
    DEALLOCATE testTable
    set @message=(select @sonuc + ‘Bilginize,
    Bu bir test mailidir

    ‘)

    EXEC [msdb].[dbo].[sp_send_dbmail]
    @profile_name = ‘MailTest’,
    @recipients = ‘[email protected]’,
    @body = @message,
    @subject = ‘Deneme Html mail – Tablo örnekli’,
    @body_format=’HTML’

  2. Tezim için sizden yardım alıyorum. Hakkınızı helal edin. Çok teşekkür ederim.

  3. Hocam merhaba,
    Mail gönderimi engellendiyse port mu kapatılmış oluyor? 25 portu mu yoksa standart 1433 portunun
    açılması yeterli olur mu? Ya da başka engelleme yolları var mı?

  4. Süper! hiç sorun yaşamadan kurabildim sayenizde emeğinize sağlık teşekkürler.

  5. Ömer hocam Merhaba
    yaptığınızın tersi olan işlemi yapmakta mümkün mü acaba bu konuda yardımcı olabilirmisiniz. şöyle ki gmail hesabımıza gelen mailleri ve gönderilen yanıtları da tsql gücü ile veritabanına aktarmak mümkünmü?

  6. Çok teşekkürler hocam dersinizi btk akademiden alıyorum. Fakat dersler eskiden çekildiği için google smtp ayarları eski. Mail hesabını sql servera bağlamak için uygulama şifresi oluşturmak gerekiyor. Çünkü google güvenlik politikası sebebiyle normal şifreyle uygulamalara giriş izni vermiyor. Google ikili doğrulamadan uygulama şifresi oluşturup o şifreyi hesap şifresi olarak girerseniz hata çözülüyor.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu