Asp.net Core Mail Gönderme

Asp.net Core Mail Gönderme

umutduran

19 Tem, 2020 06:36

umutduran

Merhaba okuyucularım,

Bu yazımda sizlere Asp.net Core içerisinde mail gönderimi nasıl yapılır bunu anlatacağım. Öncelikle anlatmak istediğim konu bizim yapacağımız mail gönderimi interface kullanarak bütün proje içerisinde kullanılacak olan gönderim çeşitidir. Siz sadece mail gönderim kodlarını herhangi bir sayfada kullanarak mail gönderimi de yapabilirsiniz. 

Şimdi mail gönderebilmek için IEmailServices.cs şeklinde bir ınterface tanımlıyoruz ve içerisine aşağıdaki kodları yazıyoruz.

IEmailServices.cs

public interface IEmailService
{
	Task MailGonder(string Konu, string Mailbody);
}

Daha sonrasında mail göndereceğimiz klasımızı tanımlıyoruz ve bunun IEmailServices interface'inden miras almasını sağlıyoruz.

EmailServices.cs

public class EmailService : IEmailService
    {
        public async Task MailGonder(string Konu, string MailBody)
        {

            try
            {
                using (SmtpClient client = new SmtpClient())
                {
                    var crediental = new NetworkCredential
                    {
                        UserName = "mail adresi",
                        Password = "mail adresinin parolası"
                    };

                    client.Credentials = crediental;
                    client.Host = "smtp sunucusu";
                    client.Port = 587; //SMTP portu burası integer bir deger olmalı.
                    client.EnableSsl = true; //SMTP SSL ayarınız.

                    using (var mail = new MailMessage())
                    {
                        mail.To.Add(new MailAddress("mail gönderilecek olan email adresi"));
                        mail.From = new MailAddress("mail gönderecek olan email adresi");
                        mail.Subject = "konu";
                        mail.Body = "mail body hazırlayıp buraya ekleyeceksiniz";
                        mail.IsBodyHtml = true;
                        client.Send(mail);
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }

            await Task.CompletedTask;

        }
    }

Evet mail servisimizi hazırladık fakat bunu projemizde ki her control dosyasında kullanabilmemiz için aşağıdaki ayarlamaları yapmamız gerekiyor.

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
	services.AddTransient<IEmailService, EmailService>();
}

Startup dosyasına ekledikten sonra kullanmak istediğiniz controlde tanımlamanız gerekiyor. Ben örnek olarak HomeController'da kullandım.

HomeController.cs

private IEmailService _gonder;

public HomeController(IEmailService gonder)
{
	_gonder = gonder;
}

İşte bu kadar. Artık sadece bir form hazırlayıp formu ilettiğiniz fonksiyon içerisinde çağırmanız gerekiyor. Bunu da aşağıda gösteriyorum.

HomeController.cs

[HttpPost]
public IActionResult MailGonder([FromQuery]string Konu, string Mailbody) {

	 _gonder.MailGonder(Konu, Mailbody);

	return Json(true);
}

Buraya kadar kod kısmındaki alanları yaptık. Şimdi .cshtml dosyamızda ne gibi bir gönderim uygulamamız gerekiyor.

Ben kendi projemde şu şekilde gönderimi sağladım.

Iletisim.cshtml

function mailGonder() {

	var konu = "Mail formdan gelen konu";
	var body = "Mail formunuzun öğelerini bu alanda oluşturun.";
	var formData = new FormData();
	formData.append("Konu", konu);
	formData.append("Mailbody", body);
	fetch("/Home/MailGonder", {
		method: "POST",
 		body: formData
	})
	.then(res => res.json())
	.then(res => {
		if (res) {
			//Mail gönderildikden sonra yapılacak işler. Ben bi tik koyup mailiniz gönderildi yazmıştım.
		}
	})

}

.İşte bu kadar artık mail gönderebiliyoruz. Bu işlemleri yaparken karşılaşacağınız en büyük hatalardan birisi sunucunuzun ssl ile çalışıp çalışmadığını bilmediğinizden mail gönderememenizdir. Lütfen buna dikkat ederek testlerinizi yapın. 

Konu ile alakalı sorularınızı post aldında  cevaplayabilirim.

İyi bloglamalar!

Aşağıya mail adresini girerek web sitemdeki makalelere abone olabilirsin. İlgini çekecek bir makale yazdığım zaman seni haberdar edebilirim!

Yorumlar

Ahmet

09 Eki, 2020 22:01

Merhaba Umut hocam, öncelikle yazınız için teşekkür ederim. Açıklayıcı bir kaleminiz var fakat anlattığınız yolları izledim kullanmak istediğim yerde mesela makale içeriği @await Html.PartialAsync("Iletisim") olarak çağırdım ve hata aldım. Bu arada cshtml olarak oluşturduğumda sizde olan İletisim.cshtmlin içindeki kodları okumadı bende itelitim.js olarak açtım okudu fakat bu seferde hata aldım. Yardımcı olabilirseniz sevinirim...

umutduran

12 Eki, 2020 16:23

Aldığınız hataları ekran olarak gönderebilirsiniz. Halen çözülmemiş bir durum ise yardımcı olmaya çalışırım.

Yorum Yap

*HTML kodlarına izin verilmemektedir. Düz metin olarak yorum giriniz.