Asp.NET MVC 4.0 WebMail Nesnesi

Bildiğiniz gibi C# programlama dilinde genellikle SMTP protokolünden mail gönderme işlemlerini gerçekleştiririz.Asp.NET MVC’de bizlere kolaylık olsun diye “System.Web.Helpers” kütüphanesinde “WebMail” sınıfını sunulmaktadır.Bu sınıfın property ve metodlarının, Asp.NET Web Form mimarisindeki “SmtpClient” ve “MailMessage” sınıfınlarındakilerden hiç bir farkı yoktur.
Eğer yazılarımı takip ediyorsanız bilirsiniz ki, ben bir konuyu detaylı bir biçimde anlatmayı severim.Ancak bu konunun detayına inmek demek, burada yazılı olarak bir proje gerçekleştirmekten ibarettir.O yüzden bir varsayım projesi üzerinden konumuzun anlatımını icra edeceğim.
Varsayalım ki, bir MVC projesinde, Controller katmanında, “Mail(Controller).cs” isminde bir Controller sınıfımız bulunsun.Bu Controller sınıfımızın içinde bulunan “Index” isimli Action metodumuzun View katmanında “.cshtml” uzantılı dosyasını oluşturmuş olalım.
Mail bilgilerini nesne olarak tutacak Entity sınıfını Model katmanında “Mail” adıyla aşağıdaki gibi oluşturuyorum.
public class Mail
{
public string KullaniciAdi { get; set; }
public string Sifre { get; set; }
public string GonderilecekMail { get; set; }
public string Konu { get; set; }
public string Mesaj { get; set; }
public string GondericiMail { get; set; }
}
Bu “Index.cshtml” dosyamızın tasarımı aşağıdaki gibi olacaktır.
@model MvcApplication12.Models.Mail
@{
ViewBag.Title = "Index";
}
<h2>Mail Gönder</h2>
@using (Html.BeginForm())
{
Kullanıcı Adı : @Html.TextBoxFor(model => model.KullaniciAdi)<br />
Şifre : @Html.TextBoxFor(model => model.Sifre)<br />
Gönderilecek Mail : @Html.TextBoxFor(model => model.GonderilecekMail)<br />
Konu : @Html.TextBoxFor(model => model.Konu)<br />
Mesaj : @Html.TextAreaFor(model => model.Mesaj)<br />
Gönderici : @Html.TextBoxFor(model => model.GondericiMail)<br />
<input type="submit" value="Mail Gönder" />
}
Biliyorum, tasarımımız pek bi halta benzemiyor.Ama bizim için şimdilik önemli olan tasarım değil, WebMail sınıfıdır.
Şimdi “Mail(Controller).cs” Controller sınıfımıza gelip, “MailGonder” isminde bir Action metod oluşturalım ve bu Action’ımızın View dosyasını da, Model Class’ı “Mail” sınıfı olarak ekleyelim.
public class MailController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult MailGonder()
{
return View();
}
}
Eklediğimiz bu sayfaların işleyişinden bahsetmek gerekirse, “Index.cshtml” sayfamızda doldurulan veriler “MailGonder.cshtml” sayfamıza nesne olarak aktarılacak ve bu nesnemizdeki veriler WebMail metodlarıyla postalanacaktır.
Şimdi “Mail(Controller).cs” isimli Controller sınıfımıza gelerek, “Index” isimli Action metodumuzun [HttpPost] Attribute’uyla işaretlenmiş overload’ını düzenleyelim.
[HttpPost]
public ActionResult Index(Mail mail)
{
HttpContext.Session.Add("Mail", mail);
return RedirectToAction("MailGonder");
}
Gördüğünüz gibi, “Mail” isminde bir Session oluşturuluyor ve Post sonucu verilerle doldurulan mail nesnesi bu Session’a atılıyor ve “MailGonder” sayfasına yönlendiriliyor.Şimdi “MailGonder.cshtml” sayfamıza gelerek WebMail metodlarının kullanımını görelim.
@model MvcApplication12.Models.Mail
@using MvcApplication12.Models
@{
Mail mail = Session["Mail"] as Mail;
if (mail != null)
{
WebMail.SmtpServer = "smtp.gmail.com";
WebMail.UserName = mail.KullaniciAdi;
WebMail.Password = mail.Sifre;
WebMail.EnableSsl = true;
WebMail.SmtpPort = 587;
WebMail.Send(mail.GonderilecekMail, "Konu", mail.Mesaj, mail.GondericiMail);
}
}
Burada da gördüğünüz gibi Session’da bulunan Mail nesnesini alıp WebMail metodlarının gerekli alanlarına verileri atıyoruz.
Eğer “localhost:****/Mail/Index” linkinde gerekli yerler doldurulup, buton tetiklenirse, mail gönderim işlemi başarıyla gerçekleştirilmiş olacaktır.
WebMail sınıfının “.cshtml” sayfalarında nasıl kullanıldığını az çok örnekle izah etmiş olduk.Son olarak bu sınıfın özelliklerinden bahsederek noktayı koyalım.
SmtpServer = Mailin gönderileceği SMTP adresi belirlenir.
UserName = Maili üzerinden göndereceğimiz mail adresinin kullanıcı adı.
Password = Maili üzerinden göndereceğimiz mail adresinin şifresi.
EnbaleSsl = Gönderilecek mail de HTML taglarının okunup okunmayacağı belirlenir.
SmtpPort = Smtp port numarası.
Send = Mail gönderme metodu.
Bu yazımızında sonuna gelmiş bulunmaktayız.
Sonraki yazılarımda görüşmek üzere..
İyi çalışmalar..
