C# İle Toplu Mail Programı Yazmak | Döküman
-
C# ile Toplu Mail Programı Yazmak
Merhaba arkadaşlar, C# ‘da mail gönderme konumuza geçmeden önce mail sisteminin mantığını kısaca inceleyelim.
Mail göndermek ve almak için sunucuda iki adet protokol vardır;
1- Mail alma Protokolü : E-posta sunucusundaki mailleri almak için kullanılan protokollerdir ,POP3 ( Post Office Protocol 3 ) ve IMAP ( Internet Mail Access Protocol ) bu protokollerin başındadır.
2- Mail Gönderme Protokolü : SMTP ( Simple Mail Transfer Protocol )
POP3 (Postahane Protokolü 3)SMTP olarak adlandırdığımız protokollerle gönderdiğimiz mailleri ulaşana kadar yönlendirerek iletir, fakat tüm çabalarına rağmen eğer maili gönderemiyorsa bize bir hata maili döndürür, ayrıca POP3 bir posta kutusu gibi gelen mailleri sunucu içerisindeki posta kutusuna kaydeder bu sayede kullanıcı istediğinde POP3 servisi ile istediği yazılımı kullanarak bu postaları çekebilir.
IMAP (İnternet Mesaj Erişim Protokolü)
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.
SMTP (Basit Dosya Transfer Protokolü)
E-Posta göndermek için sunucu ve istemci arasındaki ilişkiyi kuran protokoldür.
C# İle Mail Göndermek
C# da mail göndermek için System.Net.Mail; namespace’ini kullanmamız gerekiyor.

Resimdeki gibi using System.Net.Mail; ekledikten sonra bu namespace içindeki bazı sınıfları inceleyelim.
1- MailMessage tbtMail = new MailMessage();
“tbtMail” adında bir mail sınıfı oluşturuyoruz.Mail gönderme işlemlerini yada mail özelliklerini artık “tbtMail” değişkeni ile yapacağız.
2- tbtMail.From = new MailAddress("txt@tahribat.com");
“MailAddress” değişkeni ile mail’in kimden hangi adres üzerinden gönderileceğini belirleyen sınıf.
3- tbtMail.To.Add("murid@tahribat.com");
Mail’in kime yada kimlere gideceğini belirleyen sınıftır.
4-tbtMail.Bcc.Add(("murid@tahribat.com");
Mail için birden fazla ilgili kişiye göndermek için kullanılır. Cc ile hemen hemen aynıdır fakat Bbc’de mail’i alan kişi diğer ilgili mailleri göremez buda özellikle toplu maillerde çok işe yarayan bir sınıftır.5-tbtMail.Attachments.Add(new Attachment(@"C:\mail_eki.txt"));
Mail ile birlikte göndereceğimiz ek dosyanın bilgisini tutar.
6-tbtMail.Subject = "Konu";
Mail’in konu bilgisini tutar.
7-tbtMail.Body = icerik;
Mail’in içerik bilgisini tutar.
8SmtpClient smtp = new SmtpClient();
Mail’in 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.
9- smtp.Credentials = new System.Net.NetworkCredential("txt@tahribat.com", "sifrem");
Mail’i gönderen kullanıcının kimlik bilgilerini tutar.
10- smtp.Port = 25;
SMTP sunucusunun port bilgisini tutar. Örn: gmail için port 587’dir
11- smtp.Host = "smtp.gmail.com";
SMTP sunucusunun isim bilgisini tutar.
12- smtp.EnableSsl = true;
Sunucu SSL(‘Secure Socket Layer’,’İnternet Şifreleme Protokolü’) istiyorsa bu değer ‘true’ olacak istemiyorsa ‘false’yapacağız.
13- smtp.SendAsync(tbtMail, (object)tbtMail);
Mail’i gönderilene kadar çalışan “thread” kapanmaz, gönderme işlemi tamamlandıktan sonra kapatılır.
14- smtp.Send(tbtMail);
Mail’i gönderme işlemini yapar. Sunucuya göre “Send” ya da “SendAsync” metodlarından birisi kullanılır.
Evet arkadaşlar şimdi elimizdeki bu verilerle basit ama işlevsel bir toplu mail programı yazalım.Form Design alanında 6 textbox, 1 listbox,3 buton ve 1 OpenFileDialog ekliyoruz ve değişkenleri aşağıdaki gibi ayarlıyoruz.
1.ci Textbox : Name = "txtSunucu"
2.ci Textbox : Name = "txtMail"
3.cü Textbox: Name = "txtParola" , PasswordChar = "*"
4.cü Textbox: Name = "txtKonu"
5.ci Textbox : Name = "txtMesaj" , Multiline = "true"
6.cı Textbox : Name = “txtPort”
7.ci TextBox : Name = “txtGad”
1 Tane Listbox : Name = "lblMail"
3 Tane Button;
1.ci Button : Name = "btnYukle"
2.ci Button : Name = “btnTemizle”
3. cü Button : Name = "btnGonder"
1 Tane OpenFileDialog : Name = “dlgDosyaYukle”
Not : Dışarıdan mail list çekeceğimiz için yani yükle fonksiyonu ile dosya işlemi yapacağımız için “System.IO” namespace’imizi eklemeyi unutmuyoruz .
Görünüm temel olarak şu şekilde isterseniz 2. resimdeki gibi groupBox,icon ve renkleri düzenleyerek daha görsel hale getirebilirsiniz.


Butonların click olaylarına yazdık fakat bunu kendi tercihinze göre değiştirebilirsiniz.--------------------------------------------------------------------------------------------------------------
using System.IO;
using System.Net;
using System.Net.Mail;
private void btnTemizle_Click(object sender, EventArgs e){
lbMail.Items.Clear();
}
private void btnYukle_Click(object sender, EventArgs e)
{
try
{
dlgDosyaYukle.ShowDialog();
if (dlgDosyaYukle.FileName != "")
{
lbMail.Items.Clear();
StreamReader srRead = new StreamReader(dlgDosyaYukle.FileName);
while (srRead.EndOfStream == false)
{
lbMail.Items.Add(srRead.ReadLine().ToString());
}
srRead.Close();
}
}
catch (Exception ex)
{
MessageBox.Show("Hatalı Yükleme !\n\n" + ex.Message);
}
}
private void btnGonder_Click(object sender, EventArgs e)
{
try
{
MailMessage mesaj = new MailMessage();
mesaj.From = new MailAddress(txtMail.Text,txtGAd.Text, System.Text.Encoding.UTF8);
SmtpClient smtp = new SmtpClient();
mesaj.Subject =txtKonu.Text;
mesaj.IsBodyHtml = false;
mesaj.BodyEncoding = System.Text.Encoding.UTF8;
mesaj.Body = txtMesaj.Text;
mesaj.Priority = MailPriority.High;
smtp.Credentials = new System.Net.NetworkCredential(txtMail.Text,txtParola.Text);
smtp.Port = Convert.ToInt32(txtPort.Text);
smtp.Host = txtSunucu.Text;
smtp.EnableSsl = true;
for (int i = 0; i < lbMail.Items.Count; i++) // Gönderilecek Maillerin Yüklenmesi.
{
mesaj.Bcc.Add(lbMail.Items[i].ToString());
}
smtp.Send(mesaj);
MessageBox.Show("Tüm Mailler Başarıyla Gönderildi");
}
catch (Exception ex)
{
MessageBox.Show("Mail Gönderiminde Hata oldu :\n\n" + ex.Message);
}
}
--------------------------------------------------------------------------------------------------------------
Programımızı derledik ve “gmail” ayarlarına göre test ettik sonuç resimdeki gibi
Mail listesindeki giden maillerime bakıyorum , mail gelmiş..
Gmailde Spam’a düşmeyen ve diğer mailler görünmeyen( Bcc.Add Özelliği ) kullanışlı bir program yazdık :)

Kısaca özetlersek bu dersimizde genel olarak mail’in çalışma prensip ve protokollerini, C# da “System.Net.Mail” in bazı sınıfları ve görevlerini incelemiş ve kendi toplu mail yazılımımızı yazmış olduk.Sizler bu özellikleri geliştirebilir yada diğer yazılımlarınıza entegre ederek raporlama ve log’lama içinde kullanabilirsiniz.
Kaynak dosya yı buradan indirebilirsiniz.Tüm tahribat ailesine yararlı olması dileğiyle..
Bu Döküman Tahribat.Com Adına TxT Tarafından Yazılmıştır..
-
çok güzel olmuş saolasın.Keşke dökümanlar bölümüne yazsaydın daha kalıcı olabilirdi ;)
