Sinem Erdoğan
Vakıf Katılım Ar-Ge Merkezi
3 min readJun 11, 2024

--

SSIS’ten Script Task ile Mail Gönderimi

SSIS projelerinde belirli tasklar tamamlandığında özelleşmiş mail içerikleri ile bildirim alma ihtiyacımız bulunuyor. Bunu yapmak 3rd parti araçlar olsa da ücretsiz olarak yapabilmek için giriş/orta seviye C# ya da VB bilmeniz yeterli.

Örnek bir senaryo üzerinden ilerlersek, e-mail gönderimi için csv formatındaki dosyamızdan verileri tabloya aktarıp, kaç satır veri aktarıldığını e-mail olarak göndermek isteyelim. Bunun için öncelikle demo amacıyla 100 adet e-mail datası üretelim. https://www.mockaroo.com/ adresinden 1000 satıra kadar ücretsiz veri üretebilirsiniz. Oluşturacağınız table yapısına göre fiedları belirlerseniz işinizi kolaylaştıracaktır.

Oluşturup indirdiğimiz EmailQueueSampleData.csv isimli dosyamızı SSIS’te “Flat File Source” ile okuyacağız. Öncesinde tabloyu varsa silip yoksa oluşturmak için Execute SQL Task bileşenini kullanacağız.

“SQLStatement” bölümünde aşağıdaki scriptleri ekleyerek hazırlık aşamasını tamamlıyoruz.

Kod:

IF OBJECT_ID('EmailQueue', 'U') IS NOT NULL
DROP TABLE EmailQueue;
CREATE TABLE EmailQueue (
QueueId INT IDENTITY(1000,1) PRIMARY KEY,
FirstName NVARCHAR(100),
LastName NVARCHAR(100),
EmailAddress NVARCHAR(400));

CSV dosyadan tabloya veriyi aktarmak için “Data Flow” taskı ekleyip, aşağıdaki gibi source olarak “Flat File” ve destination olarak da “OLEDB Destination” seçip ilerliyoruz. Aktarılan satır sayısını tutabilmek ve mail içeriğinde kullanmak için de “Row Count” bileşeninden faydalanıyoruz.

Ayrıca package seviyesinde değişken tanımlayıp “Row Count” bileşeniyle mapliyoruz. Variable name olarak “QueueRowCount” verdik.

“Control Flow”a dönüp “Script Task” bileşeni ile C# kodları yazacağımız konsolu açıyoruz.

“ReadOnlyVariables” bölümüne package seviyesinde tanımladığımız “QueueRowCount” isimli değişkeni mapliyoruz.

Edit Script butonuna tıklayıp kodları yazmaya başlayabiliriz. Gönderen ve alan alıcı e-mail adresleri, smtp server, port ve password gibi özel verileri kendinize uygun olarak düzenlemelisiniz.

newMail.Body satırında ise QueueRowCount değişkenini kullanarak kaç satır veri aktarıldığını dinamik olarak iletebiliyoruz.

Kod:

var fromMailAddress = new MailAddress("info@demo.com", "SSIS E-Mail Queue Row Count Bildirim");
var toMailAddress = new MailAddress("client@demo.com", "");
const string fromMailPassword = "YourPassword";
var smtpClient = new SmtpClient
{
Host = "smtp.server.com",
Port = 25,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromMailAddress.Address, fromMailPassword),
Timeout = 20000
};
MailMessage newMail = new MailMessage();
newMail.IsBodyHtml = true;
newMail.Subject = "SSIS E-Mail Queue";
newMail.Body = "Aktarılan satır sayısı: " + Dts.Variables["QueueRowCount"].Value.ToString();
newMail.From = new MailAddress(fromMailAddress.ToString());
newMail.To.Add(toMailAddress);
{
smtpClient.Send(newMail);
}

Kodlarımızı ekleyip build ettikten sonra test aşamasına geçip mail içeriğini kontrol edebiliriz.

Paket çalışıp tamamlandıktan sonra aşağıdaki gibi bir e-mail gönderimi sağlanıyor.

Değişkenler ve C# kodlarıyla dilediğiniz içerik ve formatta gönderim yapabilir ve daha detaylı bildirimler elde edebilirsiniz.

--

--