22 Şubat 2017 Çarşamba

Asp.Net Mvc ile Mail Gönderme İşlemi

2 yorum
Bir web ortamında e-postanın en yaygın kullanımlarından birisi, ziyaretçilerin bir form aracılığıyla site sahipleriyle iletişim kurmalarını sağlamaktır. Aşağıdaki adımlarda, yeni bir MVC 5 uygulaması oluşturup mail gönderme işlemine bakacağız.

Visual Studio'yu açın ve New Project bağlantısından veya File »New» Project seçeneğinden yeni bir proje oluşturalım. C # şablonlarından ASP.NET Web Project'i seçin ve Ok tıklayın.

Asp.Net Mvc ile Mail Gönderme İşlemi


MVC'yi seçin ve diğer seçenekleri olduğu gibi bırakarak Ok'i tıklayın.

Models klasörüne yeni bir class dosyası ekleyin ve adını EmailFormModel.cs olarak kaydedin. Varolan kodun içerğini aşağıdakiyle değiştirin:

using System.ComponentModel.DataAnnotations;

namespace MVCEmail.Models
{
    public class EmailFormModel
    {
        [Required, Display(Name="Your name")]
        public string FromName { get; set; }
        [Required, Display(Name = "Your email"), EmailAddress]
        public string FromEmail { get; set; }
        [Required]
        public string Message { get; set; }
    }
}

Views\Home klasörü içerisine Contact.cshtml View dosyasını oluşturalım ve içindeki kodu aşağıdaki kod ile değiştirelim:

@model MVCEmail.Models.EmailFormModel
@{
    ViewBag.Title = "Contact";
}
<h2>@ViewBag.Title.</h2>

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    <h4>Send your comments.</h4>
    <hr />
    <div class="form-group">
        @Html.LabelFor(m => m.FromName, new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.TextBoxFor(m => m.FromName, new { @class = "form-control" })
            @Html.ValidationMessageFor(m => m.FromName)
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(m => m.FromEmail, new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.TextBoxFor(m => m.FromEmail, new { @class = "form-control" })
            @Html.ValidationMessageFor(m => m.FromEmail)
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(m => m.Message, new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.TextAreaFor(m => m.Message, new { @class = "form-control" })
            @Html.ValidationMessageFor(m => m.Message)
        </div>
    </div>
    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" class="btn btn-default" value="Send" />
        </div>
    </div>
}

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
HomeController dosyasının içerisine en üste aşağıdaki referansları ekleyelim:


using MVCEmail.Models;
using System.Net;
using System.Net.Mail;
Aşağıdaki AsynchronousContact yöntemini HomeController.cs dosyasına ekleyin ve ayarları yorum kısmında belirtilen geçerli değerlerle değiştirelim:


[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Contact(EmailFormModel model)
{
    if (ModelState.IsValid)
    {
        var body = "<p>Email From: {0} ({1})</p><p>Message:</p><p>{2}</p>";
        var message = new MailMessage();
        message.To.Add(new MailAddress("recipient@gmail.com"));  // replace with valid value 
        message.From = new MailAddress("sender@outlook.com");  // replace with valid value
        message.Subject = "Your email subject";
        message.Body = string.Format(body, model.FromName, model.FromEmail, model.Message);
        message.IsBodyHtml = true;

        using (var smtp = new SmtpClient())
        {
            var credential = new NetworkCredential
            {
                UserName = "user@outlook.com",  // geçerli mail adresi ile değiştirin
                Password = "password"  // geçerli şifre ile değiştirin
            };
            smtp.Credentials = credential;
            smtp.Host = "smtp-mail.outlook.com";
            smtp.Port = 587;
            smtp.EnableSsl = true;
            await smtp.SendMailAsync(message);
            return RedirectToAction("Sent");
        }
    }
    return View(model);
}

HomeController'a aşağıdaki metodu ekleyelim:

public ActionResult Sent()
{
    return View();
}
Views\Home klasörü içerisine Sent.cshtml View dosyasını oluşturalım ve içindeki kodu aşağıdaki kod ile değiştirelim:

@{
    ViewBag.Title = "Sent";
}
<h2>Your message has been sent</h2>

Varsayılan olarak, e-posta iletileri düz metin olarak oluşturulur. Bir HTML e-postası göndermek isterseniz, HTML'yi Body özelliğine (bu örnekte olduğu gibi) iletirsiniz ve açıkça IsBodyHtml özelliğini true olarak ayarlarsınız.

Mesaj oluşturulduktan sonra gönderilmesi gerekmektedir. Bu görevden SmtpClient sınıfı sorumludur. SmtpClient nesnesinin yapılandırması genellikle çoğu e-posta gönderme hatasının oluştuğu yerdir, bu nedenle doğru ayarları kullandığınızdan emin olmalısınız. Hem Outlook hem de Gmail için bu ayarar hemen hemen aynıdır:

GmailOutlook/Live
Hostsmtp.gmail.comsmtp-mail.outlook.com
Port587587
EnableSsltruetrue
User NameYour email addressYour email address
PasswordYour account passwordYour account password
Burada sunulan hizmetlerden herhangi birini kullanmıyorsanız, doğru değerler için mail sağlayıcınızın belgelerine bakmalısınız.

Son olarak, F5 tuşuna basarak uygulamayı çalıştıralım, Contacts sayfasına gidip bir mail göndermeyi deneyelim. İşlem başarılı olursa bizi Sent sayfasına yönlendirecektir ve "Your message has been sent"
yazısı karşımıza çıkacaktır.

2 yorum:

  1. Appreciative. The best decision that you can make is to hire an App developer near me. There are several benefits of hiring them but the question arises from where Eiliana.com is a global freelancing portal where you hire the best freelancers by filtering the location whichever suits your needs. Not all freelancing portals serve you with this unique feature but Eiliana does.

    YanıtlaSil
  2. I agree, but have you ever wondered how to compile Java program in eclipse? Java is an OOP language and it uses OOP concepts such as abstraction, encapsulation, inheritance, polymorphism. If you are a professional freelancer then you must sign up today with Eiliana.com and get connected to thousands of projects across.

    YanıtlaSil