C# Mail Gönderme

Merhabalar, C# derslerimize kaldığımız yerden devam ediyoruz. Bu dersimizde C# ile e-mail göndereceğiz. Hadi başlayalım !
Mail gönderebilmek için System.Net ve System.Net.Mail kütüphanelerini kullanacağız. Dolayısıyla bu iki kütüphaneyi mail göndermek istediğimiz sayfada çağıralım. Bunun için ise sayfanın en başına
using System.Net;
using System.Net.Mail;
kod satırlarını ekleyelim ve ardından mail göndermek için kodlarımızı yazmaya başlayalım. Öncelikle gönderilecek mailin bilgilerini belirtmek için MailMessage sınıfını kullanacak ve bu sınıfın yeni bir nesnesini türeteceğiz.
MailMessage mail = new MailMessage();
Bildiğiniz üzere bi mailin gönderen, alan, mail başlığı ve mail içeriği bilgileri kesinlikle olmalı. İşte bizde şimdi bu zorunlu bilgileri belirtmemiz gerekiyor. Öncelikle gönderen ile başlayalım. Gönderen kişi de mail olduğu için, bu işi MailAdress sınıfı ile halledeceğiz. Bu sınıf ile göndericinin mailini belirteceğiz. Sınıfın yeni bir nesnesini türetmek için de constructor yani yapıcı metoda string tipte mail adresini parametre olarak göndermemiz gerekiyor.
mail.From = new MailAdress("mail@mail.com");
Göndericiyi hallettik, şimdi de konuyu belirtelim. Bunun için de Konu anlamına gelen Subject özelliğini (property) kullanacağız. Bu property string tipte veri kabul ediyor ve örnek kullanımı şöyle;
mail.Subject = "Mail Konusu";
Sırada mailin içeriği var. Onu da Body propertisi ile yapıyoruz ve bu propertide string tipte veri kabul ediyor.
mail.Body = "Mail İçeriği Buraya Gelecek";
Bildiğiniz üzere mail içeriğinde HTML kodu yazabiliyoruz, sizde HTML koda sahip bi içerik gönderecekseniz bunu belirtmeniz gerekiyor ki maildeki HTML kodları yorumlansın ve işlensin. Bunu da IsBodyHtml propertisi ile yapıyoruz ve bu property bool tipte (true yada false) veri kabul ediyor. true verirsek yazdığımız HTML kodları yorumlanır, false verirsek yorumlanmaz ve ön tanımlı olarak false’tur.
mail.IsBodyHtml = true;
Son olarakta alıcıyı belirtelim. Bildiğiniz üzere bi maili tek seferde istediğimiz kadar kişiye gönderebiliyoruz, ister bir kişiye ister 20 kişiye mail gönderebiliriz. Ve göndereceğimiz kişileri de mail nesnesi altında bulunan To propertisi altındaki Add() fonksiyonunu kullanacağız. Bu fonksiyon string tipte alıcıların mailini istiyor ve her alıcının mailini bu fonksiyon ile bildirebiliriz.
mail.To.Add("alici1@mail.com");
mail.To.Add("alici2@mail.com");
Mail bilgilerini hallettik, şimdi de maili gönderecek sunucu bilgilerini yapalım. Maili sunucu üzerinden göndereceğimiz için öncelikle mail sunucusuna kullanıcı adı ve şifre ile giriş yapacağız ve sunucuya daha önce belirlediğimiz mail bilgilerini verip gönderme işlemini yapacağız. Mail sunucusu işlemlerini System.Net.Mail sınıfı altında bulunan SmtpClient sınıfını kullanarak yapacağız ve bu sınıfın yeni bir nesnesini türetmemiz gerekiyor. Yapıcı metod ise herhangi bir parametre almıyor.
SmtpClient client = new SmtpClient();
Sunucu işlemlerini yapacağımız sınıfı başlattık, şimdi de sunucumuzu söyleyelim. Bunu Host propertisi ile yapacağız ve bu property string tipte veri istiyor.
client.Host = "mail.site.com";
Bildiğiniz üzere maili direk sunucu üzerinden (daha doğrusu 80 portu üzerinden) gönderemiyoruz, mail için özel portlar bulunmakta. Bu port genellikle 465 yada 587 olmakla birlikte sunucuya göre değişmektedir. Elbette C# ile mail göndermek için de mail gönderme portunu belirtmemiz gerekiyor ve biz 465 olduğunu varsayalım;
client.Port = 465;
Sunucuya giriş yapabilmek için (tıpkı FTP sunucusunda olduğu gibi) Credentials propertisini kullanacağız ve bu property ise (yine tıpkı FTP sunucuda olduğu gibi) NetworkCredential sınıfından türetilmiş bir nesne istiyor. NetworkCredential sınıfının constructor metodu ise her ikiside string tipte olmak üzere sunucu kullanıcı adı ve şifre parametreleri istiyor.
smtp.Credentials = new NetworkCredential("sunucu kullanıcı adı", "sunucu şifresi");
Bazı sunucular ille de SSL kullan diyebiliyor (örneğin Gmail), işte bunu da EnableSsl propertisini kullanarak belirtebiliyoruz ve boolean tipte veri göndermemiz gerekiyor. true gönderirsek SSL kullanılıyor, false gönderirsek SSL kullanılmıyor.
client.EnableSsl = true;
Buraya kadar yaptıklarımıza bakarsak; maili gönderecek sunucunun bilgilerini belirttik, göndereceğimiz mailin alıcı, konu, içerik ve gönderen bilgilerini de belirttik. E artık geriye bir tek maili göndermek kaldı. Maili de mail sunucusu gönderdiği için ve bizde bu mail sunucusunu SmtpClient sınıfından türettiğimiz smtp nesnesi ile yaptığımız için bu nesne içerisinde bulunan Send() veya SendAsync() fonksiyonlarını kullanarak maili gönderebiliriz. Send() fonksiyonu senkron, Async() fonksiyonu asenkron olarak gönderiyor ve her ikisi de void tiptedir, yani geriye herhangi bir şey döndürmemektedir. SendAsync() fonksiyonu ile göndermeyi tavsiye ediyorum ben şahsen, çünkü mail gönderme işlemi biraz zaman alabileceği için (3-4 saniye bile olsa) Send() fonksiyonu ile gönderme işlemi sırasında program kitlenebilir fakat SendAsync() fonksiyonu ile gönderirsek program kitlenmeyecek ve işlemlerimize devam edebileceğiz. Send() fonksiyonu parametre olarak MailMessage sınıfı nesnesi istiyorken, SendAsync() fonksiyonu MailMessage nesnesi ile object tipinde user token istemekte. E MailMessage nesnesini zaten türettik ama object tipinde user token ne alaka ? Onu da MailMessage nesnesini object tipine çevirirsek halledebileceğiz 🙂
E hadi gönderelim şu maili 🙂
client.SendAsync(mail, mail as object);
3-4 saniye bekledikten sonra mailin gönderildiğini göreceğiz. Evet bu dersimizde bu kadardı, yazdığımız tüm kodları daha toplu olması için aşağıya bırakıyorum;
MailMessage mail = new MailMessage();
mail.From = new MailAddress("mail@mail.com");
mail.Subject = "Mail Konusu";
mail.IsBodyHtml = true;
mail.Body = "Mail İçeriği Buraya Gelecek";
mail.To.Add("alici1@mail.com");
mail.To.Add("alici2@mail.com");
mail.To.Add("alici3@mail.com");
SmtpClient client = new SmtpClient();
client.Host = "mail.site.com";
client.Port = 465;
client.Credentials = new NetWorkCredential("sunucu kullanıcı adı", "sunucu şifre");
client.EnableSsl = true;
client.SendAsync(mail);
Tüm C# derslerimize buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.