Toplu Mail Gönderimi ve Okundu Bilgisini Almak

Yazar: Gökhan BAĞCI
Kategori: ASP.NET
Eklenme Tarihi: 26.1.2008 19:20:39



Bu makalemizde gün geçtikçe daha çok ihtiyaç duyulan daha çok kullanılan bir konuya değineceğiz. ?Toplu Mail Gönderimi? Birden fazla kişiye aynı mesajı göndermek için bir sistem yazacağız. Ama asıl amacımız gönderdiğimiz maillerin kaç tanesinin okunduğuna erişebilmek olacak.

Bu makalemizde gün geçtikçe daha çok ihtiyaç duyulan daha çok kullanılan bir konuya değineceğiz. ?Toplu Mail Gönderimi? Birden fazla kişiye aynı mesajı göndermek için bir sistem yazacağız. Ama asıl amacımız gönderdiğimiz maillerin kaç tanesinin okunduğuna erişebilmek olacak.

Toplu halde giden maillerin çoğunun spam?e düşme olasılığı daha yüksek olduğu için gitmeyen adresleri tespit ederek daha farklı yollarla yada yine aynı şekilde farklı bir mail atarak %100 kullanıcı erişimine sahip olabiliriz.

Basit olarak bir tablo oluşturacağız. Mail adresi, Giden mailin tekilliğini sağlayacak bir alan ve Okundu bilgisini tutmak için bir boolean alan kullanacağız.

Daha sonrasında mail göndermek için bir sayfa ve okundu bilgisine erişebilmemizi sağlayacak bir resim gösterme sayfası tasarlayacağız.

Mail Gönderme kodumuz?

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

protected
void btnGonder_Click(object sender, EventArgs e)
{
    //Gönderilecek mail adresleri içerisinde tek tek dönüyoruz...
    //Biz bu kısımda Listbox'tan değerleriizi aldık. Siz daha farklı şekilde veritabanlarından,
    //text dosyalardan vs.. alabilirsiniz!
    foreach (ListItem LI in lbMailList.Items)
    {
        //Gönderen mail bilgisini tanımlıyoruz
        MailAddress From = new MailAddress(txtGonderenMail.Text, txtGonderenAdi.Text);
        //Alıcı mail adresini tanımlıyoruz
        MailAddress To = new MailAddress(LI.Value);
        //Gidecek olan mail nesnesini yanımlıyoruz
        MailMessage Email = new MailMessage(From, To);
        //Mail içeriğinin Html olup olmadığını belirtiyoruz...
        Email.IsBodyHtml = true;
        //Mail konusunu belirliyoruz
        Email.Subject = txtKonu.Text;
        //Mail içeriğini oluşturuyoruz.
        Email.Body = txtIcerik.Text;
        //Okundu bilgisini yazacağımız resim kontrolünü ekliyoruz
        //Bu kısımda internete açık bir domain belirtmeniz gerekecektir.
       //Parametre olarak mail adresi ve tekil değer olan MailID gönderiyoruz...
        Email.Body += "<br><img src=\"http://xxx.com/okundu.aspx?Mail=" + LI.Value + "&MailID=" + txtMailID.Text + "\">";
        //Mailleri göndereceğimiz SMTP Server nesnesini oluşturuyoruz
        SmtpClient MailClient = new SmtpClient();
        //Mail sunucusunun host adresini tanımlıyoruz. Ör: smtp.gmail.com
        MailClient.Host = txtSMTPSunucusu.Text;
        //Varsayılan oturum kimliğimizi kapatıyoruz.Çünkü bir smtp kullanıcı adıyla bağlantı yapacağız
        MailClient.UseDefaultCredentials = false;
        //Kullanıcı Adı ve Şifremizi belirtiyoruz
        MailClient.Credentials = new NetworkCredential(txtSMTPKullaniciAdi.Text, txtSMTPSifre.Text);
        //Teslim methodunun Network üzerinden yapılacağını belirtiyoruz
        MailClient.DeliveryMethod = SmtpDeliveryMethod.Network;
        try
        {
            MailClient.Send(Email);
            //Başarıyla giden tüm mailleri veritabanımıza kayıt ediyoruz...
            SqlConnection con = new SqlConnection("Server=.; Database=Test;******");
            SqlCommand com = new SqlCommand("Insert Mail VALUES(@MailD, @Mail, 0)", con);
            com.Parameters.AddWithValue("@MailID", txtMailID.Text);
            com.Parameters.AddWithValue("@Mail", LI.Value);
            con.Open();
            com.ExecuteNonQuery();
            con.Close();
        }
        catch
        {
            //Gitmeyen maillerin loglarını bu kod blogdan ulasabilirsiniz...
        }
    }
}
   

 

Okundu.aspx

<%@ Page Language="C#" ContentType="image/gif" CodeFile="Okundu.aspx.cs" Inherits="Okundu" %>
<%-- ContentType="image/gif" ile sayfanın resim tipinde olduğunu belirtiyoruz--%>

Okundu.aspx.cs

 
using
System;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Drawing.Imaging;

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        //Resim dosyamızı ve kullanılacak Grafik nesnesini oluşturuyoruz
        Bitmap bmp = new Bitmap(400, 20);
        Graphics grp = Graphics.FromImage(bmp);
        //Arka planı beyaz olarak ayarlıyoruz
        grp.FillRectangle(new SolidBrush(Color.White), 0, 0, bmp.Width, bmp.Height);
        //Eğer QueryString'den değer geldiyse bilgilere göre okundu bilgisini düzenliyoruz
        if (Request.QueryString["Mail"] != null && Request.QueryString["MailID"] != null)
        {
            SqlConnection con = new SqlConnection("Server=.; Database=Test;******");
            //OkunduMu=1 seçeneği ile resim doayası görüntülenen mailleri okundu olarak işaretliyoruz
            SqlCommand com = new SqlCommand("Update Mail Set OkunduMu=1 Where Mail=@Mail and MailID=@MailID", con);
            com.Parameters.AddWithValue("@Mail", Request.QueryString["Mail"].ToString());
            com.Parameters.AddWithValue("@MailID", Request.QueryString["MailID"].ToString());
            con.Open();
            com.ExecuteNonQuery();
            con.Close();
            //Grafik içerisine yazımızı ekliyoruz...
            //Sırasıyla Yazı, Font, Yazı Rengi ve Başlangıç koordinatlarını belirtiyoruz
            grp.DrawString("Bu mail '" + Request.QueryString["mail"].ToString() + "' adresine özel olarak gönderilmiştir.", new Font("Trebuchet MS", 8), new SolidBrush(Color.Navy), new PointF(0, 4));    
        }
        //son olarak ekrana oluşturduğumuz resmi gönderiyoruz...
        bmp.Save(Response.OutputStream, ImageFormat.Gif);
    }
}
   

Bilgilerimizi girdikten sonra gönder tuşuna basıyoruz.



Ben listedeki gibi 3 ad. Mail adresime gönderdim ve sadece ?gokhan@gokhanbagci.info? ?dan maili görüntüledim.

Böylelikle info@gokhanbagci.info ve gokhan.bagci@windowslive.com adresinden okunmadığını görmüş olduk.

Başka bir makalemde görüşmek üzere...

Gökhan BAĞCI
Microsoft Certified Professional


Gökhan BAĞCI

2003 yilindan itibaren .Net teknolojilerini takip etmektedir. Freelance olarak bir çok sahis ve firma için proje gelistirmistir.

Kemal BALABAN - 2.2.2012 1
:) resim yüklendiğinde okundu onayı almak gerçekten güzel düşünülmüş ama yanlış hatırlamıyorsam System.Net.Mail kütüphanesinin sanırım okundu onayıyla ilgili bir metodu vardı

Zafer GÜVEN - 27.1.2009
Merhaba, ilk önce böyle bir makale hazırladığınız için teşekkür ediyorum. Ama ben çalıştıramadım. İnternete açık bir domain de denemedim ama doldurduğum bilgiler veritabanına bile kaydedilmedi. Galiba bu domainle ilgili. 2.si smtp sunucuna "smtp.gmail.com" yazdıktan sonra gmail kullanıcı adımla şifremi yazdım alttaki textboxlara burası böylemi olucak. Yardımcı olur musunuz? Teşekkürler.

Yorumunuz