![]() |
|
|
#1 | ||
|
Senior Member
Üyelik tarihi: 29-07-2008
Mesajlar: 1.000
|
Artık CDONTS'un Mail nesnesine "elveda" derken ASP.NET'in MailMessage nesnesine "hoş geldin" diyoruz. Yeni nesne modelinin kullanımı eskisini andırmakla birlikte daha fazla programatik olduğunu söylemek mümkündür. ASP.NET'te e-posta işlemleri konulu makaleler dizisinin ilki olan bu makalede, C# dili kullanılarak e-posta gönderim işlemlerinin temeli anlatılmaktadır. Dizinin sonraki makalelerinde ise bir formdan gelen bilgilerin iletimi ile bir adresler veri tabanında yer alan kişilere ve/veya grublara e-posta iletisi gönderimi örneklenerek anlatılacaktır.
ASP.NET ile e-posta gönderme işlemleri için SMTP sunucusunun kurulu ve çalışıyor olması gereklidir. Bu sunucu, Windows kurulurken IIS 5.0 ile birlikte kurulur. İlk Adımlar - Basit E-Posta Basit e-posta iletisi için aşağıdaki kod listesini (Liste 1) inceleyelim. Burada ilk satırda, ASP+ sayfasında programlama dili olarak C# kullanılacağını belirten sayfa direktifi (@Page) yer almaktadır. İkinci satırda ise System.Web.Util isim-uzayı dışalım (import) direktifiyle kullanıma sokulmaktadır. Üçüncü satırda, e-posta iletisinin gönderileceği adres (to), e-postayı gönderenin adresi (from), e-posta konusu (subject) ve e-posta ileti gövdesi yani ileti metni (body) yer almaktadır. E-posta iletisi için gereken tüm bilgiler birer sabit karakter dizilimi (string) değeri olarak "" aralarında yazıldıktan sonra SMTPMail bileşenin Send yöntemine parametre olarak iletilmekte ve gönderilmektedir. Liste 1. Basit e-posta (PostaGonder1.aspx) <% @Page Language="C#" %> <% @Import Namespace="System.Web.Util" %> <% SMTPMail.Send("info@domain.com", "isim@domain.com", "ASP.NET İle E-posta Gönderme","Bu posta ASP.NET sayfasından gönderildi."); %> Yukarıda SMTPMail.Send yöntemi parametrelerinin, kime, kimden, konu ve ileti metni sırasında verilmesi gerektiği unutulmamalıdır. Gönderilen e-posta Türkçe karakterler içermektedir. Bu nedenle, ASP.NET sayfasında gönderilen iletide kullanılacak sayfa dilinin bildirilmesi de gereklidir. Sayfa dilinin bildirilmesi için yine @Page direktifinden yararlanmak mümkündür. Sayfa dilinin Türkçe olması için ilk satırdaki @Page direktifine Culture ve UICulture ve ResponseEncoding verilerinin aşağıdaki şekilde eklenerek değiştirilmesi izlenebilecek yollardan biridir. <% @Page Culture="tr" UICulture="tr" ResponseEncoding="utf-8" Language="C#" %> Yukarıdaki üç satırlık kod, PostaGonder1.aspx adında bir dosyaya kaydedilerek Web sunucusuna yerleştirilip istendiğinde e-posta info@ayhanergun.com adresine gönderilmek üzere SMTP sunucusunda kuyruğa alınmış olacaktır. (Örnekte kime, kimden alanlarını kendi istediklerinizle değiştirmeyi lütfen unutmayınız. Kime alanında kendi adresimi; konu alanında "Teşekkürler!" sözcüğünü görmek tabii ki beni memnun edecek olsa da ;-) Biraz Daha Profesyonellik Yukarıdaki örnekte, kime, kimden, konu ve metin bilgilerinin tümü sabit olarak yazılıp Send yöntemine parametre olarak aktarılmıştı. Programcı olarak yaklaştığımızda bu tip kodlamanın hiç te pratik olmadığını söyleyebiliriz. Çünkü, makale dizisinin ikincisinde ele alınacağı üzere, e-postanın kime, kimden, konu ve metin alanlarına aktarılan bilgiler değişken olabilir. Söylediklerimizi anlamak için bir an şu an bedava Web tabanlı e-posta hizmeti veren yerlerde (Yahoo!, Altavista, MSN gibi) karşınıza gelen e-posta formlarını hayal ediniz. İşte böyle durumlarda, aynı sayfaya ulaşan kişilerin herbiri örneğin kime alanına farklı e-posta adresleri gireceklerdir. Liste 2. E-posta Verilerinin Değişken Olması(PostaGonder2.aspx) <% @Page Culture="tr" UICulture="tr" ResponseEncoding="utf-8" Language="C#" %> <% @Import Namespace="System.Web.Util" %> <% string strKime = "info@domain.com"; string strKimden = "isim@domain.com"; string strKonu = "ASP.NET İle E-posta Gönderme"; string strMetin = "Bu posta ASP.NET sayfasından gönderildi"; SMTPMail.Send(strKime, strKimden, strKonu, strMetin); %> Yukarıda anılan sorunun çözümü için, kime alanının değişken şeklinde olması ve bu değişkenin SMTPMail nesnesinin Send yöntemine parametre olarak aktarılması gereklidir. Aşağıdaki kod örneğinde (Liste 2), tüm e-posta verileri değişken şeklinde kullanılmaktadır. Örneğin, strKime değişkeninden info@ayhanergun.com adresinin olduğuna dikkat ediniz. Şimdi, yukarıdaki kodu PostaGonder2.aspx dosyasına kaydedip deneyebilirsiniz. Bu aspx sayfasının Liste 1'dekiyle aynı sonuçları ürettiğini göreceksiniz. Yeni Sınıf : MailMessage Kullanımı Şimdi sıra, ASP.NET'in sunduğu yeni bir sınıfı tanıtmaya geldi. ASP.NET'te e-posta göndermek için posta iletisi yani MailMessage sınıfı kullanılmaktadır. Aşağıdaki kodun üçüncü satırında, MailMessage sınıfının varlıklamak (instance) suretiyle nesne msgPosta adında bir nesne yaratılmaktadır. Posta iletisi nesnesi (örneğimizde msgPosta) yaratıldıktan sonra yapılması gereken bu nesnenin kime, kimden, konu ve metin özelliklerine (property) ilgili değerleri atamaktır. Aşağıdaki kodda (Liste 3), 4., 5., 6. ve 7. satırlarında bu işlemlerin yapıldığı görülmektedir. Örneğin, 4. satırda msgPosta nesnesinin kime (To) özelliğine info@domain.com adresi atanmıştır. Liste 3. Posta İletisi Sınıfı (PostaGonder3.aspx) <% @Page Culture="tr" UICulture="tr" ResponseEncoding="utf-8" Language="C#" %> <% @Import Namespace="System.Web.Util" %> <% MailMessage msgPosta = new MailMessage(); msgPosta.To = "info@domain.com"; msgPosta.From = "isim@domain.com"; msgPosta.Subject = "ASP.NET İle E-posta Gönderme"; msgPosta.Body = "Bu posta ASP.NET sayfasından gönderildi"; SMTPMail.Send(msgPosta); %> Yukarıdaki kodu PostaGonder3.aspx dosyasına kaydedip deneyebilirsiniz. Bunun da önceki kodlarla aynı sonuçları ürettiğini göreceksiniz. Ancak, posta ileti nesnesinin kullanımının daha özel ve kullanışlı olduğunu hemen farketmişsinizdir. E-posta Biçiminin Seçimi Şimdi sıkı durun! ASP.NET'in posta ileti nesnesinin gövde biçimi BodyFormat özelliğiyle e-postanızın HTML veya salt metin türünde olmasını ayarlamanız mümkündür. Aşağıdaki kodun (Liste 4) 7. satırında yeralan msgPosta.BodyFormat = MailFormat.Text; ile posta gövdesinin metin (text) biçiminde olacağı belirtilmektedir. Bunun için posta biçimi nesnesinin Text özelliğinden yararlanılmaktadır. Liste 4. E-Posta Biçiminin Seçilmesi - Metin (PostaGonder4.aspx) <% @Page Culture="tr" UICulture="tr" ResponseEncoding="utf-8" Language="C#" %> <% @Import Namespace="System.Web.Util" %> <% MailMessage msgPosta = new MailMessage(); msgPosta.To = "info@domain.com"; msgPosta.From = "isim@domain.com"; msgPosta.Subject = "ASP.NET İle E-posta Gönderme"; msgPosta.BodyFormat = MailFormat.Text; msgPosta.Body = "Bu posta ASP.NET sayfasından gönderildi"; SMTPMail.Send(msgPosta); %> Yukarıdaki kodu PostaGonder4.aspx dosyasına kaydedip deneyebilirsiniz. Bu da önceki kodlarla aynı sonuçları üretmektedir. Ancak aşağıdaki kodda (Liste 5) size bir sürprimiz var. Liste 5'in 7. satırındaki msgPosta.BodyFormat = MailFormat.Html; kodunda posta biçimin MailFormat.Html ataması nedeniyle HTML türünde olacağı belirtilmektedir. Liste 5. Posta Biçiminin Seçilmesi - HTML (PostaGonder5.aspx) <% @Page Culture="tr" UICulture="tr" ResponseEncoding="utf-8" Language="C#" %> <% @Import Namespace="System.Web.Util" %> <% MailMessage msgPosta = new MailMessage(); msgPosta.To = "info@domain.com"; msgPosta.From = "isim@domian.com"; msgPosta.Subject = "ASP.NET İle E-posta Gönderme"; msgPosta.BodyFormat = MailFormat.Html; string strGovde = ""; strGovde=+"Merhaba!"; strGovde=+"Bu posta ASP.NET sayfasından gönderildi"; msgPosta.Body = strGovde; SMTPMail.Send(msgPosta); %> Yukarıdaki kodu PostaGonder5.aspx dosyasına kaydedip deneyebilirsiniz. E-posta Eki Posta ileti nesnesi ile yapacaklarınız elbette sadece ileti gövdesi göndermekle sınırlı değil. Şimdi, aşağıdaki kodu (Liste 6) inceleyelim. Listenin msgPosta.Attachments.Add(new MailAttachment("c:\\gonderiler\\fliste.xls")); şeklinde koduyla Attachments.Add yöntemiyle sürücü C:'nin \gönderiler klasöründe bulunan fliste.xls dosyasının e-postamıza eklendiği görülmektedir. Liste 6. E-posta Eki (PostaGonder6.aspx) <% @Page Culture="tr" UICulture="tr" ResponseEncoding="utf-8" Language="C#" %> <% @Import Namespace="System.Web.Util" %> <% MailMessage msgPosta = new MailMessage(); msgPosta.To = "info@domain.com"; msgPosta.From = "isim@domain.com"; msgPosta.Subject = "ASP.NET İle E-posta Gönderme"; msgPosta.BodyFormat = MailFormat.Html; string strGovde = ""; strGovde=+"Merhaba!"; strGovde=+"Bu posta ASP.NET ile gönderildi."; strGovde=+"Ekteki fiyat tekliflerimizi mutlaka okuyunuz"; msgPosta.Body = strGovde; msgPosta.Attachments.Add(new MailAttachment("c:\\gonderiler\\fliste.xls")); SMTPMail.Send(msgPosta); %> Yukarıdaki kodu PostaGonder6.aspx dosyasına kaydedip deneyebilirsiniz. Ancak, eklenen dosya adını değiştirmeyi ya da verilen yolda aynı adda bir dosya oluşturmayı unutmayınız. Yukarıdaki örnekte e-postaya sadece bir adet dosya eklenmektedir. Ya birden fazla dosya eklemek gerekirse ne yapmalıyız? Çözüm gayet basittir. Yukarıdaki Liste 6'nın 13. satırındaki satırı silip, bunun yerine aşağıdaki 3 satırlık kodu eklersek yine aynı sonuca ulaşırız. Ancak, bu tür kodlamanın aşağıda Liste 7'de sunacağımız avantajları bulunmakta! MailAttachment maEk = new MailAttachment("c:\\gonderiler\\fliste.xls"); IList msgEkler = msgPosta.Attachments; msgEkler.Add(maEk); Şimdi yukarıdaki kodu istenilen kadar dosya için genişletebiliriz. Liste 7. E-posta Çok Sayıda Ek (PostaGonder7.aspx) <% @Page Culture="tr" UICulture="tr" ResponseEncoding="utf-8" Language="C#" %> <% @Import Namespace="System.Web.Util" %> <% MailMessage msgPosta = new MailMessage(); msgPosta.To = "info@domain.com"; msgPosta.From = "isim@domain.com"; msgPosta.Subject = "ASP.NET İle E-posta Gönderme"; msgPosta.BodyFormat = MailFormat.Html; string strGovde = ""; strGovde=+"Merhaba!"; strGovde=+"Bu posta ASP.NET ile gönderildi."; strGovde=+"Ekteki fiyat tekliflerimizi ve mektubumuzu mutlaka okuyunuz"; msgPosta.Body = strGovde; MailAttachment maEk1 = new MailAttachment("c:\\gonderiler\\fliste.xls"); MailAttachment maEk2 = new MailAttachment("c:\\gonderiler\\mektup.doc"); IList msgEkler = msgPosta.Attachments; msgEkler.Add(maEk1); msgEkler.Add(maEk2); SMTPMail.Send(msgPosta); %> Daha fazla açıklamaya gerek var mı? Herşey ortada! Yukarıdaki kodu PostaGonder7.aspx dosyasına kaydedip deneyebilirsiniz. |
||
|
|
|