ارسال ایمیل ثبت نام به کاربران توسط Asp.net core
من میخوام وقتی یه کاربر ثبت نام کنه یک ایمیل به حساب جیمیل اش بره توسط asp.net core ولی نتونستم یه که این کارو کنم. من خیلی ویدیو های یوتیوب را هم دیدم ولی از رویش های آنها هم کار نداد. میشه یک روش خوب و جامع را برام بدین و یا اگر ویدیوی در این باره دارین برام پیشنهاد کنین. من استک اورفلو را هم خیلی سرچ کردم ولی از کدهاش سر در نیاوردم
پاسخ هوش مصنوعی
برای ارسال ایمیل در ASP.NET Core، می توانید از کتابخانه MailKit استفاده کنید. در اینجا یک روش جامع برای ارسال ایمیل ثبت نام به کاربران را به شما ارایه می دهم:
ابتدا باید بسته MailKit را به پروژه خود اضافه کنید. برای این کار می توانید از NuGet Package Manager استفاده کنید:
Install-Package MailKit
سپس یک سرویس برای ارسال ایمیل ایجاد کنید. مثلاً می توانید کلاسی به نام EmailService بسازید:
using MailKit.Net.Smtp;
using MimeKit;
using System.Threading.Tasks;
public class EmailService
{
private readonly string _email, _password, _smtpServer;
private readonly int _port;
public EmailService(string email, string password, string smtpServer, int port)
{
_email = email;
_password = password;
_smtpServer = smtpServer;
_port = port;
}
public async Task SendEmailAsync(string toEmail, string subject, string message)
{
var emailMessage = new MimeMessage();
emailMessage.From.Add(new MailboxAddress("Your Name", _email));
emailMessage.To.Add(new MailboxAddress("", toEmail));
emailMessage.Subject = subject;
emailMessage.Body = new TextPart("html")
{
Text = message
};
using (var client = new SmtpClient())
{
await client.ConnectAsync(_smtpServer, _port, MailKit.Security.SecureSocketOptions.StartTls);
await client.AuthenticateAsync(_email, _password);
await client.SendAsync(emailMessage);
await client.DisconnectAsync(true);
}
}
}
سپس در فایل Startup.cs، سرویس ایمیل را ثبت کنید:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton(new EmailService("your-email@gmail.com", "your-email-password", "smtp.gmail.com", 587));
// سایر سرویس ها
}
حالا می توانید از EmailService برای ارسال ایمیل استفاده کنید. به عنوان مثال:
public class AccountController : Controller
{
private readonly EmailService _emailService;
public AccountController(EmailService emailService)
{
_emailService = emailService;
}
[HttpPost]
public async Task Register(UserModel userModel)
{
if (ModelState.IsValid)
{
// کد ثبت نام کاربر
// ارسال ایمیل
await _emailService.SendEmailAsync(userModel.Email, "ثبت نام موفقیت آمیز", "به سایت ما خوش آمدید!");
return RedirectToAction("Index", "Home");
}
return View(userModel);
}
}
در آخر، از آنجا که استفاده از ایمیل های واقعی نیاز به پیکربندی های بیشتر دارد، مطمین شوید که گزینه Allow less secure apps را در گوگل فعال کرده اید یا از تکنیک های احراز هویت OAuth2 استفاده کنید. برای اطلاعات بیشتر به مستندات MailKit مراجعه کنید.
سوال در مورد نحوه ارسال ایمیل در Asp.net Core قبلا پرسیده شده و پاسخ هم داده شده.
اما مجدد یک بار دیگه براتون توضیح میدم و سورس تست شده هم براتون قرار میدم. یک پروژه از نوع Asp.net Core ایجاد کنید. روی نام پروژه کلیک راست کنید و یک پوشه به نام Service ایجاد کنید. داخل پوشه Service یک کلاس به نام EmailService و یک اینترفیس به نام IEmailService ایجاد کنید. کدهای زیر را داخل کلاس EmailService و اینترفیس IEmailService کپی کنید.
کلاس EmailService
public class EmailService : IEmailService
{
public async Task SendEmailAsync(string email, string subject, string message)
{
using (var Client = new SmtpClient())
{
var Credential = new NetworkCredential
{
//UserName Example : If your email is test@gmail.com yourUserName is test
UserName = "YourUserName",
Password = "YourEmailPassword"
};
Client.Credentials = Credential;
Client.Host = "smtp.gmail.com";
Client.Port = 587; // or 25 -- 587 -- 465 For Send Email
Client.EnableSsl = true;
using (var emailMessage = new MailMessage())
{
emailMessage.To.Add(new MailAddress(email));
emailMessage.From = new MailAddress("YourEmail@gmail.com", "DisplayEmailName");
emailMessage.Subject = subject;
emailMessage.IsBodyHtml = true; //contains html tag
emailMessage.Body = message;
Client.Send(emailMessage);
};
await Task.CompletedTask;
}
/////////////////////////////////////////////////////////////////
}
}
دقت کنید که مقدار UserName در کدهای بالا همان بخش اول ایمیل شما می باشد. به عنوان مثال اگر ایمیل شما Test@gmail.com می باشد UserName شما Test می باشد. سایر مقادیر هم مطابق اطلاعات ایمیل خود تکمیل کنید.
اینترفیس IEmailService
public interface IEmailService
{
Task SendEmailAsync(string email, string subject, string message);
}
خب همانطور که می دانید یک کلاس و یک اینترفیس تشکیل یک Service می دهد. بنابراین باید این سرویس در کلاس Startup.cs راه اندازی شود. پس در متد ConfigureService از کلاس Startup.cs کدهای زیر را بنویسید. (اگر معنی و مفهوم سرویس را به خوبی نمیدانید این لینک را مطالعه کنید.)
کلاس Startup.cs
public void ConfigureServices(IServiceCollection services)
{
//Email
services.AddScoped<IEmailService, EmailService>();
services.AddControllersWithViews();
}
خب حالا سرویس ایمیل شما آماده می باشد و کافیست در کنترلر از آن استفاده کنید.
در حال حاضر Solution شما باید به این شکل باشد:
کنترلر Home
public class HomeController : Controller
{
private readonly IEmailService _emailService;
public HomeController(IEmailService emailService)
{
_emailService = emailService;
}
public async Task<IActionResult> SendEmail(string emails, string subject, string message)
{
if (emails != null)
{
await _emailService.SendEmailAsync(emails, subject, message);
}
return RedirectToAction("Index");
}
public async Task<IActionResult> Index()
{
await SendEmail("emailToSend@yahoo.com", "Test", "Salam Salam");
return View();
}
}
اگر پروژه را اجرا کنید به محض ران شدن اکشن Index در کنترلر Home یک ایمیل به emailToSend@yahoo.com با موضوع Test و متن Salam Salam ارسال خواهد شد.
با توجه به خطایی که شما در بخش نظرات برای پاسخ قبلی مطرح کردید خطای شما، خطای زیر هست :
SmtpException: The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.0 Authentication Required
این خطا مربوط به کدنویسی نیست و کدهای شما صحیح هست. این خطا دلایلی مثل اشتباه بودن رمز عبور، سطح امنیتی بالای ایمیل شما و ... داره که میتونید توی این لینک راه حل ها رو مطالعه کنید.
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2