Visual Studio 2013 Yazılım Platformunda C# Koduyla GMail Hesabı Üzerinden Excel Dosyasında Kayıtlı Kişilere eMail Yollama:
visual studio'dan excele bağlanmak için veritabanına bağlanır gibi bir connect string yazmamız gerekir. Bunun için ilk önce, c# kod sayfasında kullanılmak üzere yer alan kütüphanelerin olduğu kısıma System.Net.Mail ve System.IO kütüphanelerini eklememiz gerekir.
EXCEL'den C# 'a VERİ AKTARIMI:
OleDbConnection baglanti = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + txtDosyaYolu.Text.Trim() + "; Extended Properties='Excel 12.0 xml;HDR=YES;'"); // baglanti olarak tanımladığımız bu connection nesnesi ile visual studio üzerinden excel'e bağlanıyoruz.
baglanti.Open();// bağlantımızı açıyoruz.
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [Sayfa1$]", baglanti);//da ile tanımladığımız dataAdapter nesnesi ile excelin belirli bir sayfasındaki veri tablosuna ulaşıyoruz. Tıpkı veritabanı tablo sorgulmalarındaki gibi... burada dikkat edilmesi gereken nokta excel dökümanımızda ulaşmak istediğimiz sayfanın ismidir, sonradan değiştirilmemişse default adı Sayfa1 olmalıdır. Değiştirilmişse de erişilmek istenen sayfanın ismi select sorgusuna girilmelidr, tıpkı veritabanı select sorgularındaki tablo isimleri gibi... excelde her sayfa bir tablo görevi görmektedir.
DataTable dt = new DataTable();// da ile tanımlı dataAdapter nesnesi ile gelen verileri dt diye bir dataTable'a aktarmamız gerekiyor. Böylece excel sayfasından gelen veriler kod bazında sanal tablo halini almış olacaktır.
da.Fill(dt);// burada dt ile tutmuş olduğumuz verileri dataAdapter nesnesine yüklüyoruz.
dataGridView1.DataSource = dt.DefaultView;//burada dt ile tutmuş olduğumuz sayfa verilerini uygulamanın form diye adlandırılan tasarım kısmında görüntülenmesini sağlamak için forma eklemiş olduğumuz dataGridView1 nesnesine yüklüyoruz. böylece uygulamayı çalıştırdığımızda excel sayfasından çektiğimiz veriler bir veritabanı tablosu şeklinde tasarım formumuzda listelenecektir.
baglanti.Close();//burada önceden açmış olduğumuz c#-excel bağlanma nesnesini disable ediyoruz.
-------------------------------------------------------------------------------------------------------------------------
EXCEL SAYFASINDA YER ALAN TÜM KİŞİLERE AYNI ANDA MAİL GÖNDERME:
try
{
SmtpClient client = new SmtpClient("smtp.gmail.com", 587);//burada gmail client configürasyonu ayarlarını yaptık.
string[,] dataValue = new string[dataGridView1.Rows.Count, dataGridView1.Columns.Count];//burada dataValue diye iki boyutlu bir dizi yaratarak excel sayfasından gelen data tablosunun satır ve sütun sayısını aldık.
foreach (DataGridViewRow row in dataGridView1.Rows)//tablonun tüm satırlarını teker teker dolaşır..
{
if (row.IsNewRow) continue;// satırlar devam ettiği sürece aynı işlemlere devam edecektir.
using (StreamReader reader = File.OpenText(txtFormatYolu.Text.Trim()))//burada complex bir mail göndermek adına önceden hazırlamış olduğumuz txt dosyasındaki html sayfa tasarım kodlarını okutuyorz zira txt dosyasındaki html tasarım kodları bizim mesajın gövdesini oluşturmuş olacaktır, tasarımda html kodları ile yapabildiğimiz tablo image link vb yer almaktadır. tasarım mailimize zenginlik kazandıracaktır.
{
MailMessage mesaj = new MailMessage();//burada mesaj adında mail nesnesini oluşturuyoruz.
mesaj.To.Add(dataGridView1.Rows[row.Index].Cells[2].Value.ToString());//burada excel dosyasından çektiğimiz mailin kime gidecek ise onların mail adresleri döngü devam ettiğince sırayla art arda mesaj.To.Add(); kısmında yerini alacaktır.
mesaj.From = new MailAddress(txtGondericiGMailAdres.Text);//burada kendi mail adresimizi giriyoruz.
mesaj.Subject = txtKonu.Text;//burada gönderilecek mailin başlık ya da konu kısmını oluşturacak satırı giriyoruz.
mesaj.IsBodyHtml = true;
mesaj.Body = "Sayın" + " " + dataGridView1.Rows[row.Index].Cells[0].Value.ToString() + " " + dataGridView1.Rows[row.Index].Cells[1].Value.ToString() + " ,";
mesaj.Body += Environment.NewLine + "\n";
mesaj.Body += richTextBox1.Text;//gönderilecek mailin gövdesini oluşturacak olan mesajı tasarım formumuza eklemiş olduğumuz richTextBox1 nesnesinden okuyacaktır.
mesaj.Body += reader.ReadToEnd();// burada gönderilecek mailin devamını veya alt tasarım kısmını oluşturacak olan txt dosyasından gelen html kodlar okunur.
NetworkCredential guvenlik = new NetworkCredential(txtGondericiGMailAdres.Text, txtGondericiGMailSifre.Text);//burada ise kendi mail hesabımıza giriş yaparken kullandığımız kullancıIsmi ile kullanıcıSifresi yer almaktadır.
client.Credentials = guvenlik;
client.EnableSsl = true;//mail server güvenliğini aktif hale getiriyoruz.
client.Send(mesaj);//mesajımızı gönderiyoruz.
}
}
progressBar1.Value = 100;
MessageBox.Show("Mail Tüm Listedekilere Başarıyla Gönderildi...");
progressBar1.Value = 0;
}
catch
{
// MessageBox.Show("Mail Gönderme Başarısız.", "Mail Gönderme");
MessageBox.Show("Mail Tüm Listedekilere Gönderilemedi..!");
}
Hiç yorum yok:
Yorum Gönder