Asp.Net MVC ile Mail Gönderimi

Merhaba Arkadaşlar,

Bu makalede asp.net mvc alt yapısını kullanarak Gmail üzerinden mail gönderiminin nasıl yapılabildiğini göreceğiz.

İlk olarak mail gönderimi için kullanacağımız bir adet gmail adresi almalı ve https://www.google.com/settings/security/lesssecureapps adresindeki seçeneklerden ilgili özelliği açmalıyız. Kullanacağımız yapıda form gönderildiğinde içeriği alıp mail adresine bağlandıktan sonra gönderim yapacağımız için gmail üzerinden de “Daha az güvenli” olarak adlandırılan uygulama biçimlerinin erişimlerine izin vermeliyiz. Bu izin verilmediğinde mail gönderilmiş gibi görünse de bize ulaşmıyor. Bize farklı bir uygulama üzerinden giriş yapılmaya çalışıldığına dair bilgi mail’i geliyor.

Uygulamamızda bir sitenin iletişim formunu kodladığımızı düşüneceğiz ve standart olarak gelebilecek bir kaç input içerisinden verileri alıp ilgili mail adresine göndereceğiz. “Ad & Soyad , E-Mail Adresi, Konu, Mesaj” input’larının bizim için yeterli olacağını düşünüyorum. Uygulamamızı adım adım oluşturmaya başlayabiliriz.

İlk olarak Visual Studio’yu açıyoruz ve yeni bir MVC projesi oluşturuyoruz. Proje oluşturulduktan sonra “Models” klasörü üzerinde sağ tık Add/Class seçeneği ile yeni bir model ekliyoruz. İsmini “Contact.cs” olarak belirleyelim.

Oluşturduğumuz model içerisinde iletişim formundan gelecek verileri yazacağız. Yukarıda yazdığım 4 veriyi aşağıdaki gibi string tipinde tanımlayalım.


public class Contact
{
    public string Name { get; set; }
    public string Email { get; set; }
    public string Subject { get; set; }
    public string Message { get; set; }
}

Tekrar models üzerinde sağ tık Add/Class ile yeni bir model daha ekleyelim ve adını “Mail.cs” olarak yazalım. Bu model üzerinde mail,şifre,port, mail başlığı gibi tüm paarametreleri tanımlayarak gönderim yapmasını sağlayacağız.

Önce olması gereken kod bloğunu paylaşıyorum. Sonrasında da hangi parametrenin hangi işlevi sağladığını kısa kısa yazacağım.


public static void MailSender(string body)
{
    var fromAddress = new MailAddress("mailadresiniz@gmail.com");
    var toAddress = new MailAddress("mailadresiniz@gmail.com");
    const string subject = "Site Adı | Sitenizden Gelen İletişim Formu";
    using (var smtp = new SmtpClient
    {
        Host = "smtp.gmail.com",
        Port = 587,
        EnableSsl = true,
        DeliveryMethod = SmtpDeliveryMethod.Network,
        UseDefaultCredentials = false,
        Credentials = new NetworkCredential(fromAddress.Address, "Mail_Sifresi")
    })
    {
        using (var message = new MailMessage(fromAddress, toAddress) { Subject = subject, Body = body })
        {
            smtp.Send(message);
        }
    }
}

fromAddress: Gönderici mail adresidir. Aldığımız mail içeriğini kendi adresimizden kendi adresimize göndereceğimiz için bize ait olan mail adresini yazıyoruz.
toAddress: Mail’in hangi adrese gönderileceğini yazıyoruz.
const string subject: Mail gönderildiğinde “konu” kısmında görünecek yazıyı yazıyoruz.
using (var smtp = new SmtpClient : Mail’imiz smtp servisi aracılığıyla gönderiliyor. Bu nedenle yeni bir smtp istemcisi oluşturuyoruz.
Host: Gmail’in smtp adresini yazıyoruz. Eğer farklı bir mail server üzerinden gönderilecekse onun smtp adresi yazılmalıdır.
Port: Gmail’in port numarasını yazıyoruz. Eğer farklı bir mail server üzerinden gönderilecekse onun port numarası yazılmalıdır.
EnableSsl: true değerini yazarak mail’in ssl protokolü üzerinden ulaştırılacağını belirtmiş oluyoruz.
DeliveryMethod: Mail’in teslimat şeklini belirtiyoruz. Bir kaç farklı parametresi var. Biz “Newtwork” seçtik.
UseDefaultCredentials: Varsayılan kimlik bilgilerinin kullanımını false yazarak kapattık. Bir alt satırda biz kendi kimlik bilgilerimizi belirtiyoruz.
Credentials: Gönderim kimlik bilgilerimizi belirtiyoruz. Gönderici adresi ve şifresini yazdık.

Bir alt satırda başlayan “using” içerisinde de sırasıyla gönderici adresi, gönderilen adres, mail başlığı, mail içeriği değerlerini tanımlayıp smtp servisinin “.Send()” özelliğiyle mail’i gönderdik.

Şimdi bir adet controller oluşturmamız gerekiyor. Bu controller üzerinden bir adet view oluşturacağız ve bu view içerisine iletişim formunu ekleyeceğiz. Daha sonra formun post işleminde de içeriği alıp mail göndereceğiz.

Controllers klasörü üzerinde sağ tık Add/Controller seçeneğini seçip “PageController” isminde boş bir controller ekliyoruz. Controller açıldıktan sonra sayfa içerisine eklenmiş olarak gelen “Index()” ActionResult’ı üzerinde sağ tık “Add View” seçeneği ile boş bir view ekliyoruz. Açılan view içerisinde bir adet form oluşturuyoruz ve name değerleri Contact.cs sayfasında belirlediğimiz gibi olan 4 adet input ile 1 adet submit butonu ekliyoruz.


@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "contact-form", action = "" }))
{
    <input type="text" name="Name" /><br /><br />
    <input type="text" name="Email" /><br /><br />
    <input type="text" name="Subject" /><br /><br />
    <input type="text" name="Message" /><br /><br />
    <input type="submit" value="Gönder" class="btn btn-danger" />
}

Eğer form gönderildikten sonra sayfanın iletişim sayfası dışında bir sayfaya yönlendirilmesini isterseniz yukarıdaki kod bloğunda boş olan action değerine bu sayfa url’ini yazabilirsiniz.

Tekrar PageController içerisine dönüyoruz ve form post edildiğinde yapılması gerekenleri yazıyoruz.

Sayfa içerisindeki “Index()” methodunun altına form post edildiğinde ilgili ActionResult’ın yapması gerekenleri yazıyoruz. Görüntüsü şu şekilde olmalıdır:


[HttpPost]
public ActionResult Index(Contact model)
{
    if (ModelState.IsValid)
    {
        var body = new StringBuilder();
        body.AppendLine("Ad & Soyad: " + model.Name);
        body.AppendLine("E-Mail Adresi: " + model.Email);
        body.AppendLine("Konu: " + model.Subject);
        body.AppendLine("Mesaj: " + model.Message);
        Mail.MailSender(body.ToString());
    }
    return View();
}

Yukarıdaki kodlarda ilk olarak Contact sınıfından kalıtım alan model isimli bir değişken tanımlıyoruz. Daha sonra bir if koşulu içerisinde eğer post işlemi doğru bir şekilde gelmişse tüm satırlarımızı body değişkeni içerisine “AppendLine” komutu ile ekliyoruz. 4 mesajı da ekledikten sonra “Mail” sınıfının içerisindeki “MailSender” fonksiyonuna body değişkenini gönderiyoruz.

Artık uygulamamızı hazırlamış olduk. Şimdi projeyi bir kere derleyelim ve ardından çalıştıralım. Browser’da /Page/Index sayfasına giriş yapıyoruz ve formu doldurup gönderiyoruz. Eğer buraya kadar yazdıklarım eksiksiz yapıldıysa Gmail adresini kontrol ettiğimizde mail’in geldiğini görebiliriz.

Uygulamamızın ana yapısını kurmuş olduk. Artık sitemizin iletişim sayfasından mail gönderimi yapabiliyoruz. Bundan sonraki kısımda sistemi kendinize göre güncelleyebilir, değiştirebilirsiniz. Ben kısa bir geliştirme yazarak makaleyi sonlandırıyorum.

Örneğin mail’i gönderdiğimizde sayfa yenilendi ve mail’in gönderildiğine dair bir mesaj görmediğimiz için sayfa sadece yenilendi mi yoksa mail gönderildi mi anlayamıyoruz. Kullanıcılara böyle bir belirsizlik yerine post işlemi gerçekleştikten sonra bir mesaj gösterebiliriz. Bunun için PageController içerisindeki “Mail.SendMail(body.ToString());” satırından sonra bir ViewBag oluşturalım. Örneğin şu şekilde olabilir:


ViewBag.Success = true;

Bu ViewBag sadece post işleminden sonra true değerini alacaktır. Yani bizim göstermek istediğimiz mesajı bir if döngüsü içerisinde View’a eklersek bu mesaj yalnızca post işleminden sonra görünecektir.

Index.cshtml sayfasına geliyoruz ve form içeriğini şu şekilde güncelliyoruz:


@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "contact-form", action = "" }))
{
    if (ViewBag.Success == true)
    {
        <span>Mesajınız başarıyla gönderilmiştir.</span>
    }

    <input type="text" name="Name" /><br /><br />
    <input type="text" name="Email" /><br /><br />
    <input type="text" name="Subject" /><br /><br />
    <input type="text" name="Message" /><br /><br />
    <input type="submit" value="Gönder" class="btn btn-danger" />
}

Projemizi tekrar çalıştırıp form gönderdiğimizde mesajı görebiliriz.

Not : Bu ders içeriğinde kullanılan dosyaları İndir Sayfası 62 No ‘lu Maddeden İndirebilirsiniz..

Reklam

Tüm Yorumlar

5 responses to “Asp.Net MVC ile Mail Gönderimi”

  1. Sadık Durmuş says:

    Kolay gelsin bir sorum var mail gönderirken forma girdiğimiz mail adresine mail atmasını istiyoruz. Peki forma girdiğimiz mail adresi yanlış ise bunun kontrolünü yapabileceğimiz bir sistem var mı? Yani sistemde böyle bir mail adresi tanımlı değil diye bir geri mail göndertebilir miyiz?

    • admin says:

      @Sadık,

      Mail gönderiminde from ve to alanlarını doldururken from’a kendi mail adresini, to alanına da mail gönderimi yaptığın adresi yazdığında mail gönderimi yapamazsa zaten from kısmına yazdığın mail adresine bir mail gelecektir. Sanırım isteğini bu şekilde karşılayabilirsin. Ama bilgisayaci@gmail.com adresini input alanına girdiğin anda bu mail adresinin Gmail üzerindeki varlığını sorgulayabilen bir yapı daha önce görmedim.

  2. Gulcicek says:

    Bir sorum var.Bu kodları gerçek bir web sitesi icin yapmak istersek gondericinin gmail şifresini istemeden nasıl yapabiliriz?

    • admin says:

      @Gulcicek,

      Bu gönderim tipinde göndericinin değil kendi gmail hesabının şifresini yazıyorsun. Gönderici sadece cevap vermek istediğinde kullanabilmen için mail adresinin bilgisini vermiş oluyor.

  3. Mert says:

    Merhabalar, çok akıcı bir anlatım. Çok işime yaradı. Paylaşım için çok teşekkürler, emeğinize sağlık

Leave a Reply to admin Cancel reply

Your email address will not be published. Required fields are marked *