Cumartesi, 12 Mayıs 2012 05:47

Toplu E-Posta Gönderme Uygulaması

Yazan
Öğeyi Oyla
(3 oy)

Toplu E-Posta Gönderme Uygulaması
Öncelikle hepinize merhaba,
Bu yazımızda basit bir Toplu E-posta Gönderme Uygulaması yapacağız.Öncelikle Aşağıdaki gibi bir tasarımı dizayn bölümünde oluşturuyoruz.

 

Tasarıma ek olarak birde OpenFileDialog ekliyoruz.Ve OpenFileDialog bileşeninin adını "epostaekle" olarak değiştiriyoruz.Tasarımı oluşturduktan sonra diğer tasarım elemanlarınında isimlerini aşağıdaki gibi değiştiriyoruz.
Mail adresinin Metin Kutusu( Textbox)=txtmail
parolanın Metin Kutusu( Textbox)==txtparola
konunun Metin Kutusu( Textbox)==txtkonu
Adres Eklenin Metin Kutusu( Textbox)==txtilaveet
Listbox=lsbemailadresleri
+ butonu=button1
Toplu E-Posta Ekle Butonu=btnlsbmailekle
Temizle Butonu=button2
Gönder Butonu=btngonder
Çıkış Butonu=btncikis
Kullanım Hakkında Butonu=button3
RichTextBox İleti Metni=iletimetni


Yukarıdaki işlemleri gerçekleştirdikten uygulamanın mantığını anlama adına biraz açıklama yapalım.Elektronik Posta gönderimi ve alımında iki adet protokol mevcuttur.

Posta alımında kullanılan protokoller=POP3 ve IMAP
Posta gönderiminde kullanılan protokoller=SMTP

Peki nedir bu protokoller?

Temel olarak,Protokol bir bilgiyi doğru bir şekilde iletmek için,varolan iletişim kanalının her iki ucunda kullanılan standart bir yöntemle alakalıdır.Elektronik posta ile işlem yapmak için için bir posta sunucusu ve istemcisi kullanmanız gerekir.Posta sunucusu ve istemcisi birbirleriyle protokolleri kullanarak çeşitli bilgi alışverişi yaparlar.

IMAP(Internet Message Access Protocol)=Yerel sunucudan elektronik postaya ulaşmak için standart bir protokol vardır.IMAP internet sunucunuz tarafından alınan ve sizin için düzenlenen bir client/server(alıcı/sunucu)protokolüdür.Sadece küçük bir veri transferi gerektirir ve IMAP Dial up(Çevirmeli bağlantı) gibi yavaş bağlantılar üzerinde bile çok iyi çalışır.Eğer belirli bir elektronik posta mesajı okumayı talep ederseniz,bu sunucudan yüklenecektir.Ayrıca sunucu üzerinde klasör veya posta kutuları oluşturabilir,onları silebilir yada işleyebilirsiniz.

POP3(Post Office Protocol 3)=POP3 protokolü,kullanıcıların posta kutularına erişmek ve mesajlarını kendi bilgisayarlarına indirmek için basit ve standartlaştırılmış bir yol sağlar.POP3 protokolünü kullanırken,postalarınızın hepsi yerel sunucunuza yani bilgisayarınıza posta sunucusundan indirilmiş olacaktır.Sunucu üzerinde mesajlarınızın kopyalarını bırakmayı da tercih edebilirsiniz.Avantajı ise,Mesajınız birkez indirildiğinde,Siz internet bağlantınızı kesebilir,boş vakitlerinizde mesajı okuyabilir ve daha fazla iletişim maliyetine maruz kalmadan bu işlemleri yapabilmeniz olmasıdır.

SMTP(Simple Mail Transfer Protocol)=SMTP(Basit posta aktarım protokolü),Mesajlarınızı alıcının posta sunucusuna aktarmak için MTA(Mail Transfer Agent) tarafından kullanılan bir protokoldür.SMTP protokolü sadece posta göndermek için kullanılabilir,posta almak için değil.Network/ISP ayarlarına bağlı olarak,SMTP protokolünü sadece belirli koşullar altında kullanmak mümkün olabilir.

HTTP Protokolü=Bunların dışında birde HTTP Protokolü bulunmaktadır fakat bu protokol posta iletişimleri için hizmete sunulmamıştır.Ancak posta kutunuza ulaşmak için kullanabilirsiniz.Ayrıca Web tabanlı elektronik posta protokolü olarak adlandırılan bu protokol,Hesabınızda posta oluşturmak yada almak için kullanılabilir.Hotmail,Gmail gibi sistemler HTTP protokolünü kullanan iyi birer örnektirler.

Yukarıdaki tanım karmaşasından kurtulduktan sonra yine uygulamamızı anlatmaya devam edelim.Bu uygulama,var olan bir mail hesabımızı ve şifremizi girdikten sonra,gönderilecekler listesine eklenen kişilere o mail hesabı üzerinde toplu olarak gönderim yapmaktadır.Kodlama bölümüne gelecek olursak,öncelikle aşağıdaki resimde turuncu alan içine aldığımız isim uzaylarını kendini projenizde tanımlamalısınız.Aksi takdirde gireceğiniz diğer kodları tanımayıp hata verecektir.

 

Kodlarımızı yazmaya başlıyalım...

 

-Temizle butonunu içine yazılacaklar

 

privatevoid button2_Click(object sender, EventArgs e)

 

{

 

lsbemailadresleri.Items.Clear(); //Listbox temizlemek için

 

}

 

-Ekleme butonunun yani + butonunun içine yazılacaklar

 

privatevoid button1_Click(object sender, EventArgs e)

 

{

 

if (txtilaveet.Text != "") //textbox kontrolü yapmaktadır.

 

{

 



 

lsbemailadresleri.Items.Add(txtilaveet.Text); // Listbox'a eleman eklemek için kullanılır.

 

txtilaveet.Text = ""; //Eleman eklendikten sonra Textbox temizlenir.

 

txtilaveet.Focus(); //İmleç temizleme işleminden sonra tekrar textbox içine odaklanır.

 

}

 

-Dosyadan toplu mail eklemek için kullanılan butona yazılacaklar

 

try //Olası hatalar için hata yakalama bloğu

 

{

 



 

epostaekle.ShowDialog(); //Dosya seçme penceresini göstermek için

 



 

if (epostaekle.FileName != "") //eğer bir dosya seçildiyse

 

{

 

lsbemailadresleri.Items.Clear(); //listbox temizle

 



 

StreamReader srRead = newStreamReader(epostaekle.FileName); //Yeni bir stream reader oluşturmaya yarıyor.

 



 

while (srRead.EndOfStream == false)

 

{

 



 

lsbemailadresleri.Items.Add(srRead.ReadLine().ToString()); // streamreaderda okunanı listbox içine ekliyor.

 

}

 

srRead.Close(); //Streamreader kapatılır.

 

}

 

}

 

catch (Exception)

 

{ //Olası bir hatada gözükecek mesaj

 

MessageBox.Show("Bir hata ettin affettik.Birdaha dene :)");

 



 

}

 

-Gönderme Butonu içine yazılacaklar

 

privatevoid btngonder_Click(object sender, EventArgs e)

 

{

 

 

 

MailMessage mesaj = newMailMessage();//Mesaj adında bir sınıf oluşturuyoruz.Artık işlemler bu değişken üzerinden yapılacak.

 

mesaj.From = newMailAddress(txtmail.Text, "Mühendislik Eğitimi", System.Text.Encoding.UTF8);//Mailin kimden geldiğini belirtiyoruz.

 

SmtpClient smtp = newSmtpClient();//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.

 

mesaj.Subject = txtkonu.Text;//Mesajın konusunun nereden alınacağını belirtiyoruz.

 

 

 

mesaj.IsBodyHtml = false;//Html kodlara izin vermeyi redddediyoruz.

 

mesaj.BodyEncoding = System.Text.Encoding.UTF8;//Karakter sorununa çözüm getirmek için kullanıyoruz.

 

mesaj.Body = iletimetni.Text;//Mesaj metninin nerden çekileceğini belirtiyoruz.

 

mesaj.Priority = MailPriority.High;

 

smtp.Credentials = new System.Net.NetworkCredential(txtmail.Text, txtparola.Text);//Maili gönderen kullanıcının kimlik bilgilerini tutar.

 

smtp.Port = 587;//Gmail portu

 

smtp.Host = "smtp.gmail.com";// Gmail smtp sunucu adresi

 

smtp.EnableSsl = true;

 

for (int i = 0; i < lsbemailadresleri.Items.Count; i++)//Listbox içindeki elemanları döngü içindeki kod ile gönderilecekler listesine ekliyoruz.

 

{

 



 

mesaj.Bcc.Add(lsbemailadresleri.Items[i].ToString());//Listbox içindeki elemanları gönderilecekler listesine eklemeye yarayan kod.

 



 

}

 



 

smtp.Send(mesaj);//Mesaj gönderme komutu.

 



 

MessageBox.Show("Tüm Mailler Başarıyla Gönderildi");//Mesajın başarı ile ulaştığını belirten uyarı mesajı.

 

}

 

-Çıkış Butonu içine yazılacaklar.

 

privatevoid btncikis_Click(object sender, EventArgs e)

 

{

 

this.Close();//Varolan pencereyi kapatmaya yarar.

 

}

 

-Program Hakkında butonuna yazılacaklar.

 

privatevoid button3_Click(object sender, EventArgs e)

 

{

 

MessageBox.Show("Uygulama hakkında bilgi veren metin buraya yazılır.");//Mesaj vermeye yarayan kod.

 

}

 

Uygulama temel olarak böyle çalışıyor.Nihayetinde basit bir uygulama olduğu için gönderdiğiniz mailler spam muamelesi görüp Junk(Önemsizler) içine atılacaktır.Yukarıda ben gmail hesabı kullandım.Eğer dilerseniz yahoo,hotmail gibi sistemleride tercih edebilirsiniz.Tek yapmanız gereken smtp host ve port bilgilerini değiştirmeniz olacaktır.

Hotmail için :

Smtp server:smtp.live.com

Smtp port:25

Kavramaya yardımcı olması açısından uygulamayı paylaşıyorum.Sorularınız için yorum bölümünü kullanabilirsiniz.

Uygulama adresi: https://www.box.com/s/9b3e3507d1e30eca9b1d

Kaynakça:

http://www.emailaddressmanager.com/tips/protocol.html

http://msdn.microsoft.com/en-us/library/system.io.streamreader.aspx

http://social.msdn.microsoft.com/search/en-us?query=openfiledialog&x=0&y=0

 



Okunma 6761 defa