25 Temmuz 2013

Asp.NET GridView'ı E-Posta İle Gönderme

Merhabalar;

Asp.Net'te veri dolu bir GridView'ı gmail uzantılı bir e-posta ile herhangi bir posta adresine gönderme işlemini yapacağız.

E-posta gönderme işlemi için şu namespace'leri projeye eklemek gerekir:

using System.Net.Mail;
using System.Net;


Ayrıca GridView'umuzu HTML formata çevirmemiz lazım ki e-postanın gövdesini oluşturabilelim. Bunun için de şu namespace'leri projeye eklemek gerekir:

using System.Text;
using System.IO;


Önce GridView'u HTML formata çevirmemiz lazım:

private string GridViewToHtml(GridView gv)
    {
        StringBuilder sb = new StringBuilder();
        StringWriter sw = new StringWriter(sb);
        HtmlTextWriter hw = new HtmlTextWriter(sw);
        gv.RenderControl(hw);
        return sb.ToString();
    }

Bu işlemle birlikte artık e-postanın gövdesini oluşturacak GridView'ın string hali hazırlanmış oldu.

E-posta gönderme işlemini de aşağıdaki fonksiyon sayesinde gerçekleştirebiliriz:

public void SendMail()
    {
        // mail adında MailMessage nesnesi yaratılır
        MailMessage mail = new MailMessage(); 
        
        //Postayı gönderenin e-posta adresi belirtilir
        mail.From = new MailAddress("gondereninpostaadresi@gmail.com");

        //E-postanın kime gideceği belirtilir
        mail.To.Add("alicininpostaadresi@example.com");

        //E-postanın konusu
        mail.Subject = "Konu";

        //E-postanın içeriği yani GridView'ın HTML halinin string versiyonu gövdeyi oluşturur
        mail.Body = GridViewToHtml(gridViewBilet); 

        mail.IsBodyHtml = true

        //sc adında SmtpClient nesnesi yaratılır
        SmtpClient sc = new SmtpClient(); 

        //Gmail için geçerli port bildirilir
        sc.Port = 587; 

        //Gmailin smtp host adresini belirtilir
        sc.Host = "smtp.gmail.com"

        //SSL etkinleştirilir
        sc.EnableSsl = true;

        //Gmail hesap kontrolü için gönderenin bilgileri girilir
        sc.Credentials = new NetworkCredential("gondereninpostaadresi@gmail.com ", "sifreniz");

        //E-posta gönderilir 
        sc.Send(mail); 
    }

Ben örnek olsun diye ufak bir uçak bileti rezervasyonu uygulaması yapıp kendime bir posta gönderdim. Görseli şöyle:


Hoşçakalın.


14 yorum:

  1. merhaba.
    kaynak dosyayı eklerseniz ii olurdu.

    YanıtlaSil
    Yanıtlar
    1. Evet bu yazıyı yazdığımda devam eden bir çalışmam vardı, eklememiştim.
      İlginize teşekkürler.

      Sil
  2. Merhaba
    Mail Olarak Sayfa Gönderebilşirmiyiz Mesela Benim Anasayfamın Aynısı Ona Mail Yoluyla Gidecek Yada Benim Mail İçin tasarladıgım Bir Sayfa Gönderecegim

    Mail:yasin_sarica1996@hotmail.com

    YanıtlaSil
    Yanıtlar
    1. Merhaba, http://www.systemwebmail.com/faq/3.2.aspx size yardımcı olabilir.

      Sil
  3. Peki
    Bu kodları toplu mail göndermek için nasıl revize edebiliriz ?

    YanıtlaSil
  4. Hata aliyorum

    An exception of type 'System.Web.HttpException' occurred in System.Web.dll but was not handled in user code

    Additional information: Control 'GridView1' of type 'GridView' must be placed inside a form tag with runat=server.

    YanıtlaSil
    Yanıtlar
    1. Kodunuzun .aspx tarafında tag'lerde bir hata yapmışsınız. GridView1 adlı kontrolünüzün property'leri arasında runat="server" da olmalı.

      Sil
    2. Merhaba gridview property'lerinde runat="server" olduğu halde aynı hatayı alıyorum sebebi ne olabilir?

      Sil
    3. http://stackoverflow.com/questions/6343630/gridview-must-be-placed-inside-a-form-tag-with-runat-server-even-after-the-gri
      adresindeki ilk cevabı uygulayabilir misiniz acaba? Olmazsa yine bakalım.

      Sil
  5. Merhabalar ,

    Mantık Güzel ve Kullanışlı . Toplu Bülten Gönderimi için uyguladım . Paylaşımınız için teşekkürler .

    YanıtlaSil
    Yanıtlar
    1. Merhaba Ercan Bey, yardımcı olduysa mutlu oldum. Uyguladığınız yöntemleri burada paylaşabilirseniz sonraki okuyuculara yardımcı olabilir. Teşekkürler.

      Sil
  6. merhaba elif hn. gönder butonuna nasıl bağlıyoruz onu tam olarak göremedim.

    YanıtlaSil
    Yanıtlar
    1. Merhaba, odaklanmanız gereken yer SendMail() metodu aslında. Bu metodu nerede isterseniz orada kullanabilirsiniz. Siz sanırım bir butonun click event'inde çağırmak istiyorsunuz. Bu şekilde yapabilirsiniz.

      Sil