folder Tahribat.com Forumları
linefolder C#, Asp.Net, .Net Core
linefolder C# İle Toplu Mail Programı Yazmak | Döküman



C# İle Toplu Mail Programı Yazmak | Döküman

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    TxT
    TxT's avatar
    Kayıt Tarihi: 13/Eylül/2007
    Erkek

    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.

    http://img219.imageshack.us/img219/8058/59631932.jpg

    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.http://img126.imageshack.us/img126/9753/48114741.jpg



    http://img196.imageshack.us/img196/4795/86253222.jpg

    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 http://img269.imageshack.us/img269/6749/68782695.jpg



    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 :)
    http://img189.imageshack.us/img189/9712/67387748.jpg

    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..

     

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Zork.
    torpedo_XL
    torpedo_XL's avatar
    Kayıt Tarihi: 21/Ağustos/2005
    Erkek
    çok güzel olmuş saolasın.Keşke dökümanlar bölümüne yazsaydın daha kalıcı olabilirdi ;)

    Bilge insanlar konuşurlar çünkü söyleyecek bir şeyleri vardır. Aptal insanlar konuşurlar çünkü bir şey söylemek zorundadırlar. Demokrasi, bir eğitim işidir. Eğitimsiz kitlelerle demokrasiye geçilirse oligarşi olur. Devam edilirse demagoglar türer. Demagoglardan da diktatörler çıkar. --Platon, Devlet                                                                                                                                                                                                                                                                                                                                                                                         
Toplam Hit: 5300 Toplam Mesaj: 2