MVC ile Doğrulama ve Şifre Sıfırlama Maili Gönderme

Çoğu WEB sayfalarında üyelik sistemleri bulunmaktadır. Kullanıcı üye olurken mail adresine aktivasyon maili gönderip, maile gönderilen linke tıklayarak üyeliği aktif edilmekktedir.İşte bu işlemi gelin MVC de yapalım.Öncelikle veritabanımızı aşağıdaki gibi tasarlayalım.

Modelimiz oluşturalım.

public partial class uye_tablo
    {
        public int uye_id { get; set; }
        public string uye_adsoyad { get; set; }
        public string uye_mail { get; set; }
        public string uye_pass { get; set; }
        public string parolatekrar { get; set; }//Biz ekledik.
        public string uye_kod1 { get; set; }
        public string uye_kod2 { get; set; }
        public string uye_onayli { get; set; }

  }

HomeController oluşturup index sayfamızın görüntüsünü aşağıdaki gibi yapalım;

Tasarım için kullandığım mail.css dosyası;

 body {
     font-family: Arial;
         font-size: 10pt;
       }
 table {
         border: 1px solid #ccc;
         border-collapse: collapse;
       }
table th {
         background-color: #F7F7F7;
         color: #333;
         font-weight: bold;
         }

table th, table td {
         padding: 5px;
         border: 1px solid #ccc;
         }
.error{
         color: red;
      }
.renk {
        color:Blue;
      }

index.cshtml sayfamız;

@model mvckendiemaildogru.Models.uye_tablo
@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Üye Kaydı</title>
    <link href="~/Content/mail.css" rel="stylesheet" />
</head>
<body>
    @using (Html.BeginForm("Index", "Home", FormMethod.Post))
    {
        @Html.ValidationSummary()
         <table border="0" cellpadding="0" cellspacing="0">
            <tr>
                <th colspan="3">
                    Kayıt
                </th>
            </tr>
            <tr>
                <td>
                    Kullanıcı Adı ve Soyadı
                </td>
                <td>
                    @Html.TextBoxFor(m => m.uye_adsoyad)
                </td>
                <td>
                    @Html.ValidationMessageFor(m => m.uye_adsoyad, "", new { @class = "error" })
                </td>
            </tr>
            <tr>
                <td>
                    Mail Adresi
                </td>
                <td>
                    @Html.TextBoxFor(m => m.uye_mail)
                </td>
                <td>
                    @Html.ValidationMessageFor(m => m.uye_mail, "", new { @class = "error" })
                </td>
            </tr>
            <tr>
                <td>
                    Parola
                </td>
                <td>
                    @Html.PasswordFor(m => m.uye_pass)
                </td>
                <td>
                    @Html.ValidationMessageFor(m => m.uye_pass, "", new { @class = "error" })
                </td>
            </tr>
            <tr>
                <td>
                    Paroa Tekrarı
                </td>
                <td>
                    @Html.PasswordFor(m => m.parolatekrar)
                </td>
                <td>
                    @Html.ValidationMessageFor(m => m.parolatekrar, "", new { @class = "error" })
                </td>
            <tr>
                <td></td>
                <td>
                    <input type="submit" value="Kaydet" />
                </td>
                <td>@Html.ActionLink("Giriş Ekranına Git", "Giris", "Home")
                </td>
            </tr>
            <tr>
                <td colspan="3" class="renk ">@ViewBag.Mesaj</td>
            </tr>
        </table>
    }
</body>
</html>

Tasarımımız hazır şimdi sıra geldi üye kaydı yapmaya,

        [HttpPost]
        public ActionResult Index(string uye_adsoyad, string uye_mail, string uye_pass,uye_tablo uyeler)
        {
            uyeDBEntities veri = new uyeDBEntities();
            uye_tablo kullanici = new uye_tablo();
            if (veri.uye_tablo.Where(x => x.uye_mail == uye_mail).Any())
            {
                ViewBag.Mesaj = "Bu mail adresiyle daha önce kayıt yapıldı.";
                return View("Index");
            }
            else
            {
                kullanici.uye_adsoyad = uye_adsoyad;
                kullanici.uye_mail = uye_mail;
                kullanici.uye_pass = uye_pass;
                kullanici.uye_kod1 = DateTime.Now.Millisecond.ToString();
                kullanici.uye_kod2 = Guid.NewGuid().ToString();
                kullanici.uye_onayli = "0";
                veri.uye_tablo.Add(kullanici);
                veri.SaveChanges();
                SendActivationEmail(kullanici);//Mail gönderme
                ViewBag.Mesaj = "Üye kaydı yapıldı.Mail kutunuza aktivasyon linki gönderildi.";
                return View(kullanici);
            }
        }

SendActivationEmail() aktivasyon maili gönderme metodumuz;

        private void SendActivationEmail(uye_tablo KBilgi)
        {
            using (MailMessage mm = new MailMessage("asasmaz@hotmail.com", KBilgi.uye_mail))
            {
                mm.Subject = "Hesap Aktivasyonu";
                string body = "Merhaba " + KBilgi.uye_adsoyad + ",";
                body += "<br /><br />Hesabınızı etkinleştirmek için lütfen aşağıdaki bağlantıyı tıklayın";
                body += "<br /><a href = '" + string.Format("{0}://{1}/Home/Aktifet/{2}", Request.Url.Scheme, Request.Url.Authority, KBilgi.uye_kod1 + KBilgi.uye_kod2) + "'>Hesabınızı etkinleştirmek için burayı tıklayın.</a>";
                body += "<br /><br />Teşekkürler";
                mm.Body = body;
                mm.IsBodyHtml = true;
                SmtpClient smtp = new SmtpClient();
                smtp.Host = "smtp-mail.outlook.com";
                smtp.EnableSsl = true;
                NetworkCredential NetworkCred = new NetworkCredential("asasmaz@hotmail.com", "Mail adresine ait şifreniz");
                smtp.UseDefaultCredentials = true;
                smtp.Credentials = NetworkCred;
                smtp.Port = 587;
                smtp.Send(mm);
            }
        }

Mail kutunuzu kontrol ettiğinizde şu şekilde bir aktivasyon maili aldığınızı görürsünüz.