Ana Sayfa >> ASP.Net >> Toplu Mail Gönderimi ve Okundu Bilgisini Almak
Kategoriler
 ASP.Net
 C#.Net
 VB.Net
 SQL Server
 SQL Script
 Eğlence
 Haberler
 Görsel Ders
 Ücretsiz Programlar
 Diğer

Dost Siteler
 Volkan KORKMAZ
 Sem GÖKSU
 Mustafa Altuntaşlar
 Adnan TÜRK
 Ergün YÜCEL
 Koray KOCABAŞ
 Yazılım Uzmanı
 Yaz Geliştir
 Yazılım Günlüğü
 Code Project

Takvim
<Temmuz 2010>
PztSalÇarPerCumCmtPaz
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

Hakkımda
Windows Live Alerts
 E-Posta
 Msn ( )
 Skype


Login with Facebook
 
 Toplu Mail Gönderimi ve Okundu Bilgisini Almak
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.

images003.jpg

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

images004.jpg

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.

images001.jpg

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

images002.jpg

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

Eklenme Tarihi: 26.01.2008 19:03:00
Yorum Yaz
Gönderen
Başlık
Yorum


Yorumlar

Son 2 günde okuduğum 2. toplu gönderim makalesi. yazgeliştirdede konu hakkında makale yayınlanmış. Bu arada elinize sağlık çok güzel olmuş... Sürekli sizi takip ediyorum.
Yazan: Tayfun BERİK , Tarih: 26.01.2008
süper
Hocam elinize sağlık çok açıklyaıcı ve faydalı bilgilerle donatmışsınız makaleyi, Yine can alıcı bir noktadan yakalamışsınız :DD
Yazan: Alper , Tarih: 15.03.2008
tşk
çok güzel bir makale olmuş teşekkrüler
Yazan: Ayşe KURTOĞLU , Tarih: 15.03.2008
...
Eline Sağlık, güzel bir makale olmuş.
Yazan: Murat ÇATAL , Tarih: 26.04.2008
Outlook Engellemesi
Daha önce bende bunun gibi birşey yapmak istemiştim ve Outlook programın gelen maildeki image dosyalarını varsayılan olarak görüntülemediğinden işin içinden çıkamamıştır. Bu çözümde de client tarafında bu tazr bir engellemeye takılır mı?
Yazan: Sakir SEN , Tarih: 02.05.2008
>> Sakir SEN
Tabiki takılabilir. Bu yöntem ile %100 okundu bilgileri geri dönmeyebilir. Ama bu yöntemde şuanki teknoloji için alabilceğimiz en iyi yöntem :D
Yazan: Gökhan BAĞCI , Tarih: 03.05.2008
Gerçekten Teşekkürler
1,5 yıl boyunca tamamlanmayan bir kursa gittim .net ve c# hakkından senden öğrendiğimden fazla şey öğrenmedim gerçekten teşekkür ederim... Kolay gelsin
Yazan: Umut Aras , Tarih: 28.05.2008
eline sağlık
hocam ilk mailimi size atıcam :))
Yazan: temuçin haytaç , Tarih: 25.10.2008
Ricam
S.a hocam size çok teşekkür ediyrum her gün sizin sitedeyim yeni ne var dye bakıyrum bu konuyu eklediğiniz günden bu güne kadar uğraştım ama ben sql server yüklenmedi kendi bilgisayarıma sizden ricam aynı sistemi MSAccess İle Yaparsanız çok memnun olrum
Yazan: Bahattin OĞUZ , Tarih: 29.01.2009
Prosüdür kullanmışın... ?
eline emeğine sağlık ama sen burada prosüdür kullanmışsın kulalndığın prosüdürü birde biz görsek..
Yazan: Ürfet DEMİRTAŞ , Tarih: 01.04.2009
>> Ürfet DEMİRTAŞ
Her hangi bir prosedür kullanmadım bu makalede, düz sql sorgusu çektim eğer 3'lü tabloyu kastediyorsan
Yazan: Gökhan BAĞCI , Tarih: 29.04.2009




2006-2008 © Gökhan BAĞCI
Tüm hakları saklıdır.