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("Tahoma", 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