Kemal Demir http://kemal.csharpturk.net kemal@csharpturk.net C# ile e-posta Göndermek 25.12.2006 Web sitemizin üyelerine ya da adreslerini bir yerde biriktirdiğimiz arkadaşlarımıza toplu olarak eposta atmak istediğimiz zamanlar olur. Ya da bazen web sitenizde bir etkileşim olduğunda, bu durumu sitenizin size eposta ile haber vermesini istersiniz. Bunlar neler olabilir derseniz, web sitenizdeki bir yazıya yorum yazılması, bir programın site üzerinden indirilmesi, bir reklâmın görüntülenmesi vb. olabilir. Tabiî ki, bu biraz da sizin hayal gücünüze ve kullanacağınız yere kalmış..net 1.0 ve 1.1 sürümlerinde System.web.mail adlı isim uzayı içerisindeki sınıflarla bu tür bir uygulama geliştirebiliyordunuz. Şimdi bunu.net 2.0 ile nasıl yapabileceğimize bir göz atalım. System.Net.Mail isim uzayı ile.net 2.0 içerisine çok kullanışlı bir eposta API'si yerleştirilmiş. Eposta gönderme işlerinize büyük oranda çözüm sunacak bir API. Bir kaç temel örnek üzerinden bu API'yi inceleyelim. Deneyimli okuyucularımız bilirler,.net 1.0 ve 1.1 zamanında da bir mail API'sı vardı aslında. System.Web.Mail. Fakat hem sadece web için oluşturulmuş hem de asp ile sunucu taraflı kod yazanların sık kullandıkları CDONTS sisteminin.net içerisine dahil edilmiş şeklinden ibaretti. Hem bir.net bileşeninde olması gereken işlevselliği sağlamıyordu, hem de kullanımı çok zahmetli idi. System.Net.Mail ise çok işlevsel ve sağlam duruyor. Ayrıca masaüstü uygulamalarda ve mobil uygulamalarda kullanımı da mümkün hale geldi..net programcıları ayrıca bu API ile birlikte SMTP işlevselliğini de yeniden tasarladılar. Daha yeni özellikler ve yöntemlerle mail gönderme işlemini daha kolay ve işlevsel hale getirdiler. Asenkron gönderim seçeneği de bunlardan bir tanesidir. İlk olarak System.Net.Mail içerisindeki önemli bir kaç sınıfın ne olduğunu açıklayalım. Attachment Sınıfı: Adından da anlaşılacağı gibi maillerimizle birlikte ek dosya göndermek için tasarlanmıştır. MailAdress Sınıfı: TO, CC, BCC ya da alıcı adresler için mail adresi tanımlamaya yarar. MailMessage: SmtpClient sınıfı ile gönderilecek olan mail mesajını tutar. TO, CC, BCC, Attacment gibi özellikleri vardır. Mesajın gövdesini ise Subject ve Body özellikleri oluşturur. SmtpClient: SMTP protokolü ile mail göndermeyi olanaklı kılan sınıf. SmtpException: SmtpClient sınıfı mesajı gönderemediği durumda istisnaları ortaya çıkaran sınıf. System.Net.Mail ile daha modern bir bileşen kullanarak mail göndermenin rahatlığını hissedeceksiniz. NOT:Aşağıdaki örnek programların çalışabilmesi için aşağıdaki kodu using bloğuna eklememiz gerekiyor. using System.Net.Mail; Sadece İki Satır Kod Yazarak Mail Gönderebilirsiniz. SmtpClient istemci = new SmtpClient("mail.csharpturk.net"); istemci.send("yunus@csharpturk.net", "kemal@csharpturk.net", "Mail Mesajı", "Deneme mesajı gönderiyorum"); 1/5
Bir SmtpClient örneği oluşturuyoruz ve Send yöntemine gerekli parametreleri geçerek gönderme işlemini yapıyoruz. SMTP protokolü ile mesajı gönderen aslında sadece bu iki satır koddur. Şimdi biraz daha detaylı temel bir uygulama yapalım. try MailMessage mesaj = new MailMessage(); mesaj.from = new MailAddress("yunus@csharpturk.net"); mesaj.to.add(new MailAddress("kemal@csharpturk.net")); mesaj.to.add(new MailAddress("goksu@csharpturk.net")); mesaj.to.add(new MailAddress("yasin@csharpturk.net")); mesaj.cc.add(new MailAddress("montoya@csharpturk.net")); mesaj.subject = "C#Türk.net"; mesaj.body = ".net ile eposta göndermek adlı makale yayında."; SmtpClient istemci = new SmtpClient("mail.csharpturk.net"); istemci.send(mesaj); Response.Write("Mesaj gönderildi."); catch (SmtpException ex) catch (Exception ex) Yukarıdaki programda önce mesaj nesnesini oluşturuyoruz. Daha sonra gönderen adres için From özelliğini ayarlıyoruz. To, Cc ve Bcc özellikleri birer koleksiyon olduğundan Add yöntemi ile istediğimiz kadar adresi ekleyebiliriz. Body ve Subject özelliklerini de ayarladıktan sonra sıra geldi göndermeye. SmtpClient istemcimizi oluşturuyoruz ve Send yöntemi ile hazırladığımız mesajı gönderiyoruz. İstisnaları yakalarken dikkat ederseniz iki tane istisna bloğu yazdık. 2/5
SmtpException olarak oluşan istisnaları ayrı bir blokta, oluşacak diğer istisnaları da ayrı bir blokta yakalayıp diğerlerinden ayırt edebiliyoruz. system.net.mail API'sinin diğer bir özelliği ise SMTP ayarlarının web.config dosyasında tutulabilmesidir. Aşağıdaki kodu web.config içerisine ekledikten sonra yukarıda yazdığımız programı tekrar yazıp web.config dosyasındaki ayarları kullanmasını sağlayalım. <system.net> <mailsettings> <smtp from="yunus@csharpturk.net"> <network host="mail.csharpturk.net" port="25" username="kullanıcı" password="şifre" defaultcredentials="true" /> </smtp> </mailsettings> </system.net> Şimdi yukarıdaki programı yeniden yazalım. try MailMessage mesaj = new MailMessage(); mesaj.to.add(new MailAddress("kemal@csharpturk.net")); mesaj.to.add(new MailAddress("goksu@csharpturk.net")); mesaj.to.add(new MailAddress("yasin@csharpturk.net")); mesaj.cc.add(new MailAddress("montoya@csharpturk.net")); mesaj.subject = "C#Türk.net"; mesaj.body = ".net ile eposta göndermek adlı makale yayında."; SmtpClient istemci = new SmtpClient(); istemci.send(mesaj); Response.Write("Mesaj gönderildi."); catch (SmtpException ex) catch (Exception ex) 3/5
Web.Config dosyasında tutulan SMTP sunucu bilgisi ve diğer bilgilerin bir yerden kontrol edilebilmesi ile merkezi bir denetim imkânı da sağlanmış oldu. Web sitemizin Download bölümüne hem Windows Programı hem de Web Programı olarak örnek uygulamalar eklendi. Ekran görüntüleri aşağıdaki gibidir. Şekil 1 : Windows Programı Ekran Görüntüsü. Text veya HTML olarak mail gönderebilirsiniz. 4/5
Şekil 2 : E-posta gönderildikten sonraki ekran görüntüsü. Şekil 3 : Web Programı Arayüzü. 5/5