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…
Eline sağlık hocam.
Rica ederim Hakan hocam.
Emeğinize sağlık Ömer hocam.
Teşekkür ederim.
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’
Süpersin. Teşekkür ederim.
Tezim için sizden yardım alıyorum. Hakkınızı helal edin. Çok teşekkür ederim.
Helal olsun tabi ne demek.?
Arayıp Ömer hocaya soracaktım güzel denk geldi :))
Süper olmuş 🙂
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ı?
Merhaba Gülşah,
Mail göndermek için 25 portunun ya da bazı sunucularda 587 portunun açık olması gerekiyor.
Süper! hiç sorun yaşamadan kurabildim sayenizde emeğinize sağlık teşekkürler.
Rica ederim. 🙂
Ö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ü?
Ç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.