27 Eylül 2008 Cumartesi

C#.NET İLE G-MAİL HESABINDAN DİĞER HESAPLARA MAIL


name="ProgId" content="Word.Document">

.NET in resmi dili olarak gösterilen c# ile framework kütüphanesinin olanaklarından faydalanmak oldukça kolaydır. .NET framework kütüphanelerinde yer alan system.net ve system.net.mail isim alanları sayesinde herhangi bir web sitesini ziyaret etmeden bir masaüstü uygulaması gibi istenilen adresten başka bir adrese mail gönderme programı yapmak mümkün hale gelmiştir. Bu program yalnızca gmail hesabından mail gönderme özelliğine sahiptir. Birkaç yeni özellik eklenerek tüm hesaplardan gönderim sağlanabilir. Alıcı ise tüm mail hesaplarından olabilir.

Program SMT(simple mail transfer) protokolü kullanılarak mail göndermektedir.SMTP server olarak “smpt.gmail.com” yazılması nedeniyle sadece gmailden gönderim yapmaktadır. Programın görünümü aşağıdaki gibidir.



Gönder butonu içine gömülen kodlar:

gonder();

if (hata !=1)

{

MessageBox.Show("İLETİNİZ BAŞARIYLA GÖNDERİLDİ", "İLETİM MESAJI", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

Görüldüğü üzere gönder butonunda sadece gonder() adında bir fonksiyon vardır bu fonksiyon ise aşağıdaki gibidir.

void gonder()

{

string kullanıcı = textBox_kullanıcı.Text, şifre = textBox_şifre.Text;

MailMessage MailGonderelim = new MailMessage();

MailGonderelim.To.Add(textBox_kime.Text.ToString());

MailGonderelim.Subject = textBox_konu.Text.ToString();

MailGonderelim.From = new MailAddress(textBox_kimden.Text.ToString());

MailGonderelim.Body = textBox_konu.Text;

if (eklenecekDosya != null)

{

Attachment MaileDosyaEkleyelim = new Attachment(eklenecekDosya);

MailGonderelim.Attachments.Add(MaileDosyaEkleyelim);

}

SmtpClient smtp = new SmtpClient("smtp.gmail.com");

smtp.EnableSsl = true;

NetworkCredential cred = new NetworkCredential(kullanıcı,şifre);

smtp.Credentials = cred;

try

{

smtp.Send(MailGonderelim);

}

catch

{

MessageBox.Show("Hatalı Giriş!");

hata = 1;

}

}

Öncelikle formun üst kısmında görülen kullanıcı adı ve şifre ilgili textbox lardan alnıyor.Ardından

System.Net isim alanında yer alan MailMessage sınıfından MaiGonderelim adında bir nesne oluşturuluyor. Oluşturduğumuz bu nesne sayesinde artık MailMessage sınıfının tüm özellikerinden faydalanabiliyoruz. Kodlarda da görüldüğü gibi formun gerekli yerlerinden e-mailin nerden alınacağı başlığı ve nereye ne gönderileceği tek tek Mailgonderelim nesnemiz ile belirlenmektedir.

if (eklenecekDosya != null)

{

Attachment MaileDosyaEkleyelim = new Attachment(eklenecekDosya);

MailGonderelim.Attachments.Add(MaileDosyaEkleyelim);

}

Yukarıdaki kısım ise formumuza eklemiş olduğumuz OpenFileDialog elemanı ile e-mail imize bilgisayarımızdan dosya eklememizi sağlar. Kullanıcı Dosya Ekle butonuna tıklayınca ilk anda aşağıdaki komutlar yürütülür.

private void button2_Click(object sender, EventArgs e)

{

if (OpenFile.ShowDialog() == DialogResult.OK)

{

eklenecekDosya = OpenFile.FileName.ToString();

//Dosyamızın adresini string içerisine yazıyoruz

textBox_EK.Text = OpenFile.SafeFileName.ToString();

//kullanıcıya ekledigi dosyanın adını gosteriyoruz

}

Burada eklenecekdosya isimli önceden tanımlanmış olan string dosyanın ismini alıyor. Daha sonra kullanıcı gönder butonuna bastığı anda eklenecekdosya stringi NULL değerinde değilse yani bir dosya eklenmişse sayfa başındaki if şartı sağlanır ve System.Net.Mail isim alanının başka bir sınıfı olan Attachment sınıfı sayesinde dosya ekleme işlemi kolayca gerçekleştirilir ve son aşamaya geçilmiş olur.

SmtpClient smtp = new SmtpClient("smtp.gmail.com");

NetworkCredential güvenlik = new NetworkCredential(kullanıcı,şifre);

smtp.Credentials = güvenlik;

E-mail gönderme işlemini SMT(Simple Mail Transfer) protokolüyle yaptığımız için smtpClient sınıfından smtp adında bir nesne oluşturuyoruz ve parametre olarak smtp server adını veriyoruz.

NetworkCredential sınıfı ise güvenlik için kullanılmıştır. Smtp nesnemizin Credentials özelliğine gmail için geçerli bir kulanıcı adı ve şifre gönderilmezse smtp server isteğimizi reddedecektir ve e-mail gönderimi başarısız olacaktır.

Son olarak smtp nesnemizin send metoduyla MailMessage sınıfından türettiğimiz MailGonderelim nesnemizi yani e-mail imizi gönderiyoruz. Bu işlemi yaparken. net framework kütüphanesinin sağladığı istisnai durum yakalama(exception) kontrolünde try- catch bloğu kullanılmıştır. Try bloğunda yapılmak istenen işle ilgili komutlar verildikten sonra catch bloğunda ise kullanıcıya MessageBox sınıfı ile bir hata mesajı verilerek istenmeyen durumlardan kurtulma sağlanmış olur.

try

{

smtp.Send(MailGonderelim);

hata=0;

}

catch

{

MessageBox.Show("Hatalı Giriş!");

hata = 1;

}

Burada catch bloğuna düşme kullanıcının yanlış bir kullanıcı adı veya şifre vermesinden dolayı , smtp server dan kaynaklanan bir hata ,internet bağlantısından kaynaklanan bir hata veya sebebini anlayamadığımız başka bir hatadan kaynaklanabilir. İşte bu anlaşılmaz hatalar için .NET de exception(istisnai durum yakalama) kontrolü geliştirilmiştir. Hata=1 komutun ise iletim mesajının gönderileceği esnada bir hatanın oluşup oluşmadığını kontrol etmek için kullanılmıştır. Hata değişkeninin değerine göre hata veya iletim mesajı gönderilir.

Faydalı olması dileğiyle...


Hiç yorum yok: