دراین مقاله چگونگی ارسال ایمیل توسط MailKit در برنامه ASP.NET Core را شرح خواهیم داد . تا پایان این مقاله همراه ما باشید.
برنامه ما باید ایمیلی را با کد یا لینک تأیید به عنوان بخشی از فرآیند ثبت نام و همچنین فرآیند بازیابی رمزعبور ارسال کند.
بنابراین در این مقاله یاد می گیریم که چگونه ارسال ایمیل با استفاده از MailKit را در برنامه های ASP.NET تنظیم کنیم.
ارسال ایمیل در ASP.NET Core در مقایسه با نسخه های قبلی ASP.NET خیلی ساده است.
MailKit چیست؟
MailKit یک کتابخانه متن باز NET mail client. برای ویندوز، مکینتاش، Linux و پلتفرم های موبایل همچون ios واندروید می باشد. که بر اساس MimeKit ساخته شده است.
تمام کتابخانه های ارسال ایمیل همچون SMTP و غیره را از MailKit دریافت می کنیم.
اضافه کردن MailKit در برنامه ASP.NET Core
اضافه کردن MailKit در ASP.NET Core خیلی زیرکانه نیست.
می توانید Project.json یا Nuget Package Manager را ترجیح دهید.
استفاده از Nuget Package Manager را برای نصب و مدیریت وابستگی ها در پروژه را ترجیح میدهم.
گام۱:
بر روی پروژه ASP.NETCore خود راست کلیک کرده و Manage Nuget Package را انتخاب کنید.
گام۲:
در سربرگ Browse و در کادر جستجو MailKit را جستجو کرده و همانطور که در تصویر نشان داده میشود نصب نمایید.
هنگامی که MailKit نصب شد سرویس ایمیل را نصب می کنیم.
لطفا کدهای زیر را برای فعال نمودن سرویس ایمیل اضافه کنید.
کلاس MessageServices واقع در پوشه Services را باز کنید. کلاس مانند شکل زیر می باشد:
لطفا به کلاس ارسال کننده ایمیل نگاه کنید.
قطعه کد:
var mimeMessage = new MimeMessage(); mimeMessage.From.Add(new MailboxAddress (FromAdressTitle, FromAddress )); mimeMessage.To.Add(new MailboxAddress (ToAdressTitle, ToAddress )); mimeMessage.Subject = Subject; //Subject mimeMessage.Body = new TextPart("plain") { Text = BodyContent }; using (var client = new SmtpClient()) { client.Connect(SmtpServer, SmtpPortNumber, false); client.Authenticate( "myname@company.com", "MYPassword" ); await client.SendAsync(mimeMessage); Console.WriteLine("The mail has been sent successfully !!"); Console.ReadLine(); await client.DisconnectAsync(true); }
بیایید قبل از اینکه نوشتن کدها را شروع کنیم در مورد ویژگی ها و اجزای ایمیل بحث کنیم.
- جزئیات فرستنده: فرستنده (ادمین یا جزئیات برنامه)
- نام / عنوان:
- ایمیل
- جزئیات دریافت کننده: جزئیات کسی که برنامه ما ایمیل را به او ارسال میکند.
- نام / عنوان ایمیل
- موضوع: موضوع ایمیل
- بدنه: پیامی که باید ارسال شود (که احتمالا شامل تصاویر، متن و ویدیو باشد)
- جزئیات میزبان
- نام میزبان: نام میزبان (تأمین کننده سرویس ایمیل)
- پورت: پورت
- SSL: که میتواند true یا false باشد.
جزئیات احراز هویت
- ایمیل: آدرس ایمیل معتبر
- رمز عبور
اکنون بیایید برای ارسال ایمیل کد بنویسیم.
افزودن مرجع Reference
خطوط زیر را برای اضافه کردن مراجع در کلاس MessageServices فراموش نکنید:
- using MailKit.Net.Smtp;
- using MimeKit;
- using MailKit.Security;
کد:
کدهای زیر را داخل متد SendEmailAsync بنویسید:
try { //From Address string FromAddress = "myname@company.com"; string FromAdressTitle = "My Name"; //To Address string ToAddress = email; string ToAdressTitle = "Microsoft ASP.NET Core"; string Subject = subject; string BodyContent = message; //Smtp Server string SmtpServer = "smtp.office365.com"; //Smtp Port Number int SmtpPortNumber = 587; var mimeMessage = new MimeMessage(); mimeMessage.From.Add(new MailboxAddress (FromAdressTitle, FromAddress )); mimeMessage.To.Add(new MailboxAddress (ToAdressTitle, ToAddress )); mimeMessage.Subject = Subject; //Subject mimeMessage.Body = new TextPart("plain") { Text = BodyContent }; using (var client = new SmtpClient()) { client.Connect(SmtpServer, SmtpPortNumber, false); client.Authenticate( "myname@company.com", "MYPassword" ); await client.SendAsync(mimeMessage); Console.WriteLine("The mail has been sent successfully !!"); Console.ReadLine(); await client.DisconnectAsync(true); } } catch (Exception ex) { throw ex; }
جایگزین کردن داده های واقعی با داده های ساختگی (Hostname, Email, Password) را فراموش نکنید.
اکنون ارسال ایمیل از طریق برنامه خود DemoApp را بررسی کنید.
ASP.NET Core احراز هویت داخلی را برای کاربران تأمین میکند (اگر در حین ایجاد پروژه جدید فعال کرده باشید) حالا سعی کنید ایمیل تأیید به کاربران وقتیکه برای اولین بار در برنامه ثبت نام کرده اند، ارسال کنید.
بدین منظور بعضی از کدها را در متد Register کنترل کننده اکانت اصلاح خواهیم کرد.
گام۱:
کنترل کننده اکانت را باز کنید.
گام۲:
به متد Register کنترل کننده اکانت بروید
متد رجیستر مانند تصویر زیر می باشد.
قطعه کد:
// POST: /Account/Register [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<IActionResult> Register(RegisterViewModel model, string returnUrl = null) { ViewData["ReturnUrl"] = returnUrl; if (ModelState.IsValid) { var user = new ApplicationUser { UserName = model.Email, Email = model.Email }; var result = await _userManager.CreateAsync(user, model.Password); if (result.Succeeded) { // For more information on how to enable account confirmation and password reset please //visit https://go.microsoft.com/fwlink/?LinkID=532713 // Send an email with this link // var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); // var callbackUrl = Url.Action(nameof(ConfirmEmail), "Account", // new { userId = user.Id, code = code }, protocol: HttpContext.Request.Scheme); // await _emailSender.SendEmailAsync(model.Email, "Confirm your account", // $"Please confirm your account by clicking this link: <a href='{callbackUrl}'>link</a>"); await _signInManager.SignInAsync(user, isPersistent: false); _logger.LogInformation(3, "User created a new account with password."); return RedirectToLocal(returnUrl); } AddErrors(result); } // If we got this far, something failed, redisplay form return View(model); }
لطفا توجه کنید برخی از کدها در متد رجیستر کامنت گذاری شده اند.
این خطوط کد برای موارد زیر مورد استفاده قرار می گیرند:
- ایجاد توکن منحصر بفرد بر اساس جزئیات کاربر
- ایجاد url فراخوانی منحصر بفرد برای تأیید ثبت نام کاربر
- ارسال ایمیل به کاربر تازه ثبت نام کرده با url فراخوانی
اکنون کد را مانند زیر کامنت برداری کنید:
قطعه کد:
// POST: /Account/Register [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<IActionResult> Register(RegisterViewModel model, string returnUrl = null) { ViewData["ReturnUrl"] = returnUrl; if (ModelState.IsValid) { var user = new ApplicationUser { UserName = model.Email, Email = model.Email }; var result = await _userManager.CreateAsync(user, model.Password); if (result.Succeeded) { // For more information on how to enable account confirmation and password reset please //visit https://go.microsoft.com/fwlink/?LinkID=532713 // Send an email with this link var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); var callbackUrl = Url.Action(nameof(ConfirmEmail), "Account", new { userId = user.Id, code = code }, protocol: HttpContext.Request.Scheme); await _emailSender.SendEmailAsync(model.Email, "Confirm your account", $"Please confirm your account by clicking this link: <a href='{callbackUrl}'>link</a>"); TempData["Message"] = "Confirmation Email has been send to your email. Please check email."; TempData["MessageValue"] = "1"; //SignInManager to sign in user. await _signInManager.SignInAsync(user, isPersistent: false); _logger.LogInformation(3, "User created a new account with password."); return RedirectToLocal(returnUrl); } AddErrors(result); } // If we got this far, something failed, redisplay form return View(model); }
بدین طریق کد ارسال ایمیل را اضافه کرده و ارسال ایمیل را در فرآیند ثبت نام فعال سازی کردیم.
اجرای برنامه:
گام۱:
برنامه را Rebuild کرده و اجرا کنید.
گام۲:
به صفحه رجیستر بروید ( از طریق NavBar کاربر یا مستقیما در url، Account/Register/ را بزنید)
بعد از ثبت نام کردن یک ایمیل تأیید به ایمیل شما فرستاده میشود.
لطفا صندوق ورودی و پوشه اسپم خود را کنترل نمایید. ایمیلی مانند زیر دریافت خواهید کرد.
ما ارسال ایمیل در ASP.NET Core را با استفاده MailKit بطور موفقیت آمیز ادغام کردیم.
همچنین در مورد چگونگی محدود کردن کاربران غیر مجاز به برنامه و فعال کردن فراموشی رمز عبور Forget Password و بازیابی رمز عبور Reset Password دربرنامه بحث خواهیم کرد.
خلاصه:
- یاد گرفتیم چطور MailKit را در برنامه های ASP.NET Core نصب کنیم.
- چطور MassegeSrevices را در ASP.NET Core تنظیم کنید
- ایمیل آزمایشی از طریق برنامه ASP.NET Core ارسال کنیم.
هیچ دیدگاهی نوشته نشده است.