C#’ta mail göndermek uygulamasından önce mail gönderme işleminin nasıl çalıştığı konusuna biraz deyinelim.

Mail gönderebilmek için bir sunucuda iki adet protokol vardır: Mail Gönderme Protokolü, Mail Alma Protokolü.

Mail Alma Protokolü

Bir e-posta sunucusundaki mailleri alabilmek için kullanılan protokoldür. POP3 ya da IMAP bu protokollerin başındadır.

     POP3 (Post Office Protocol 3)

SMTP olarak adlandırdığımız protokollerle gönderdiğimiz mailler eğer kişiye ulaşmamışsa, otomatik olarak farklı yollar denenir. Farklı yollarla yine ulaşmıyorsa bize bir hata mesajı gönderir. Fakat POP3 servisini bir posta kutusu gibi düşünebiliriz. Bir e-posta geldiğinde sunucu içerisinde gelen posta kutusuna kaydedilir, kullanıcı istediğinde POP3 servisi ile istediği yazılımı kullanarak bu postaları alabilmektedir.

IMAP (Internet Mail Access Protocol)

POP3 gibi, sunucuda kayıtlı olan e-postalara ulaşabilmek için kullanılan bir protokoldür. POP3’ten farkı, birden çok bilgisayardan bir mesaja ulaşılabilmesidir. POP’da bir e-postaya tek bir bilgisayardan erişim sağlanabilmektedir.

Mail Gönderme Protokolü

    SMTP (Simple Mail Tranfer Protocol)

E-Posta göndermek için sunucu ve istemci arasındaki ilişkiyi kuran protokoldür. E-Posta gönderme işlemini bir örnekle inceleyelim:

Benim mail adresim: veysel@ugurkizmaz.com . Mail gönderme protokolü olarak POP3’ü kullanıyorum. Yani benim web sitemin bulunduğu sunucumda POP3 protokolüyle mail gönderen bir mail sunucusu da yer almaktadır. vkizmaz@zirvedekibeyinler.net mail adresine mail gönderdiğim zaman mail öncelikle POP3 protokolü ile mail sunucuma gelir, oraya kaydedilir, sunucu maili gönderilecek kişiye iletir.

——————————————————-

C#’ta e-posta gönderme işlemini inceleyelim:

Mail işlemlerini yapabilmek için öncelikle using bölümüne aşağıdaki namespace’i ekleyelim:

using System.Net.Mail;
Mail gönderebilmek için bu namespace içerisinde bulunan MailMessage ve SMTPClient sınıflarından faydalanacağız.
Mail mesajımı oluşturabilmek için MailMessage sınıfı türünden bir değişken oluşturmamız gerekmektedir.
MailMessage ePosta = new MailMessage();

ePosta değişkenimiz, göndeceğimiz e-posta’mızın bütün elemanlarını bulundurmaktadır.

————————–

From : E-Posta’nın kimden gönderileceği bilgisini tutar. MailAddress türünden bir değişken istemektedir.

ePosta.From = new MailAddress(“gonderen@zirvedekibeyinler.net”);

————————–

To : E-Postanın kime/kimlere gönderileceği bilgisini tutar.

ePosta.To.Add(“alan1@zirvedekibeyinler.net”);
ePosta.To.Add(“alan2@zirvedekibeyinler.net”);
ePosta.To.Add(“alan3@zirvedekibeyinler.net”);

————————–

Attachments : E-Postaya eklenecek eklentilerin bilgisini tutar.

ePosta.Attachments.Add(new Attachment(@”C:\deneme.txt”));

————————–

Subject : E-Posta’nın konusu bilgisini tutar.

ePosta.Subject = “Konu”;

————————–

Body : E-Posta’nın içerik bilgisini tutar.

ePosta.Body = icerik;

————————–

SMTPClient : E-Posta’nın gönderileceği SMTP sunucu ve gönderen kullanıcının bilgilerinin yazılıp, MailMessage türünde oluşturulan mailin gönderildiği sınıftır.

SmtpClient smtp = new SmtpClient();

————————–

Credentials : E-Posta’yı gönderen kullanıcının kimlik bilgilerini tutar.

smtp.Credentials = newSystem.Net.NetworkCredential(“gonderen@zirvedekibeyinler.net”, “sifre”);

————————–

Port : SMTP sunucusunun port bilgisini tutar.

smtp.Port = 25;

————————–

Host : SMTP sunucusunun isim bilgisini tutar.

smtp.Host = “smtp.zirvedekibeyinler.net”;

————————–

EnableSsl :Sunucu SSL istiyorsa bu değeri true yapacağız.

smtp.EnableSsl = true;

————————–

SendAsync : E-Posta’yı asenkron olarak gönderir. Yani e-posta gönderilene kadar çalışan thread kapanmaz, gönderme işlemi tamamlandıktan sonra kapatılır.

smtp.SendAsync(ePosta, (object)ePosta);

————————–

Send : E-Posta’yı gönderme işlemini yapar. Sunucuya göre Send ya da SendAsync metodlarından birisi kullanılır.

smtp.Send(ePosta);

————————–

Aşağıdaki uygulama, C# dili kullanılarak GMAIL hesabından başka bir hesaba mail gönderme işlemini gerçekleştiren fonksiyondur:

 

public bool Gonder(string konu, string icerik)
{
MailMessage ePosta = new MailMessage();
ePosta.From = new MailAddress(“posta@gmail.com”);
//
ePosta.To.Add(“alan1@gmail.com”);
ePosta.To.Add(“alan2@gmail.com”);
ePosta.To.Add(“alan3@hotmail.com”);
//
ePosta.Attachments.Add(new Attachment(@”C:\deneme.txt”));
//
ePosta.Subject = konu;
//
ePosta.Body = icerik;
//
SmtpClient smtp = new SmtpClient();
//
smtp.Credentials = new System.Net.NetworkCredential(“posta@gmail.com”,”sifre”);
smtp.Port = 587;
smtp.Host = “smtp.gmail.com”;
smtp.EnableSsl = true;
object userState = ePosta;
bool kontrol = true;
try
{
smtp.SendAsync(ePosta, (object)ePosta);
}
catch (SmtpException ex)
{
kontrol = false;
System.Windows.Forms.MessageBox.Show(ex.Message, “Mail Gönderme Hatası”);
}
return kontrol;
}