ASP NET CORE RAZOR PAGE BAKIM TEKNİK SERVİS PROJE 052 EMAİL DOĞRULAMA İŞLEMLERİ (EMAİL VERIFICATION)

Bu dersimizde Email Doğrulama işlemlerini gerçekleştireceğiz. Email doğrulama deyince aklımıza şı gelir, bir siteye üye olduğumuzda email ile üyeliklerimizi gerçekleştiririz. Site üye olunan adresin doğruluğunu kontrol edebilmek için kayıt olunan adrese bir doğrulama maili gönderir. Kullanıcının bu doğrulama malinde ilgili linke tıklamasını ister. Akabinde doğrulama işlemi yapılır. Böylelikle uydurma mailleri ile kayıt yapılmasının önüne geçilmiş olunur.

Detaylı ders anlatımı ve kod taklibi için video eğitim:

Buradaki mail gönderme işlemini SMTP server aracılığı ile hizmet alarak gerçekleştirebiliriz. Ancak ben uygulamam da SendGrid kullanacağım. SendGrid bir web servis hizmeti veren ve günlük olarak bize 100 maile kadar ücretsiz mail attırabilmemizi sağlayan bir web servis. Ücretsiz olarak 100 maile kadar bir sorun çıkmıyor.

Şimdi uygulamamıza geçelim. SendGrid adresine gidiyoruz. Burada var ise üye girişinizi yapın, yok ise üyelik yapmanız gerekiyor.

https://sendgrid.com/

Üyeliğinizi yaptınız varsayarak API key oluşturma aşamasına geçiyorum.

Solda yer alan Settings alanından API Keys seçiniz.

Daha sonra orta kısımda yer alan Create API Key butonuna basınız.

Karşınıza aşağıdaki gibi bir görsel çıkacak.

Burada bir isim vermeniz isteniyor. API Key Name alanına bir isim veriniz.

API Key Permissions alanında Full Access seçiniz. Akabinde Create & View seçiniz.

Burada API Key üzerine tıklayınız ve Key code kopyalayınız, zaten kopyalanınca Copied diye uyarı gelecek. Aşağıdaki görseldeki gibi olacak yani.

Kod Kısmı

Akabinde projeme dönüyorum ve appsettings.json’a geliyorum.

Sonra appsettings.json içeriği:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=DESKTOP-FIUL2TU\\SQLEXPRESS;Database=DbGursoyCNCBakim;Trusted_Connection=True",
    "GursoyCNCBakimContext": "Server=(localdb)\\mssqllocaldb;Database=GursoyCNCBakimContext-e6c56531-1f63-4474-bede-9708cf982831;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "SendGridKey": "SG.TmXvkCnrS-Wwn-_..........???...._
}

Akabinde projemde yeni bir klasör oluşturuyorum. Adını Email verdim. Daha sonra bu klasör içine yeni bir class ekliyorum adını EmailOptions verdim. Bir class daha ekliyorum bununda adını EmailGonderici veriyorum.

Daha sonra Tools menüsü Nuget Package Manager > Manage Nuget Packages For Solution seçip, arama kısmında SendGrid yazıp ilgili paketi buluyor ve yükleme işlemini gerçekleştiriyorum.

EmailGonderici classıma geliyor ve kodlarımı yazıyorum.

using Microsoft.AspNetCore.Identity.UI.Services;
using Microsoft.Extensions.Options;
using SendGrid;
using SendGrid.Helpers.Mail;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace GursoyCNCBakim.Email
{
    public class EmailGonderici : IEmailSender
    {
        public EmailOptions Options { get; set; }

        public EmailGonderici(IOptions< EmailOptions > emailOptions)
        {
            Options = emailOptions.Value;
        }

        public Task SendEmailAsync(string email, string subject, string htmlMessage)
        {
            var client = new SendGridClient(Options.SendGridKey);
            var mesaj = new SendGridMessage()
            {
                From = new EmailAddress("ismailgursoy@gmail.com", "Gürsoy CNC Bakım Servisi"),
                Subject = subject,
                PlainTextContent = htmlMessage,
                HtmlContent = htmlMessage
            };

            mesaj.AddTo(new EmailAddress(email));

            try
            {
                return client.SendEmailAsync(mesaj);
            }
            catch (Exception ex)
            {

            }

            return null;
                
        }
    }
}

EmailGonderici classımı yazdıktan sonra EmailOptions.cs’ye geliyor ve ilgili property’imi ekliyorum.

EmailOptions.cs içeriği:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace GursoyCNCBakim.Email
{
    public class EmailOptions
    {
        public string SendGridKey { get; set; }
    }
}

Bunu tamamladıktan sonra da konfigürasyon ayarlarımızı gerçekleştirmek için startup.cs’ye geliyorum ve ilgili servislerimi ekliyorum.

Sonra startup içeriği:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.UI;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.EntityFrameworkCore;
using GursoyCNCBakim.Data;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.AspNetCore.Identity.UI.Services;
using GursoyCNCBakim.Email;

namespace GursoyCNCBakim
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure< CookiePolicyOptions >(options =>
           {
               options.CheckConsentNeeded = context => true;
               options.MinimumSameSitePolicy = Microsoft.AspNetCore.Http.SameSiteMode.None;
           });

            services.AddDbContext< ApplicationDbContext >(options =>
                options.UseSqlServer(
                    Configuration.GetConnectionString("DefaultConnection")));

            services.AddIdentity< IdentityUser, IdentityRole >().AddDefaultTokenProviders().AddDefaultUI().AddEntityFrameworkStores< ApplicationDbContext >();


            services.AddSingleton< IEmailSender, EmailGonderici >();
            services.Configure< EmailOptions >(Configuration);



            services.AddAuthentication().AddFacebook(fb =>
            {
                fb.AppId = "806339729944423";
                fb.AppSecret = "cff8cdbd26336e61d9589c5512c07a7e";
            });

            services.AddRazorPages().AddRazorRuntimeCompilation();

            services.AddDbContext< ApplicationDbContext >(options =>
                    options.UseSqlServer(Configuration.GetConnectionString("GursoyCNCBakimContext")));
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseDatabaseErrorPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthentication();
            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapRazorPages();
            });
        }
    }
}

Bu dersimiz bu kadar, bir sonraki derste görüşmek üzere.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir