دسته بندی ها
10:32 1399/12/09

ارسال ایمیل ثبت نام به کاربران توسط Asp.net core

مشخصات سوال کننده :
کاربر : Hamnava     امتیاز کاربر : 0     رتبه کاربر : 7066
دسته بندی : Asp.net Core

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 3415
هوش مصنوعی

پاسخ هوش مصنوعی

برای ارسال ایمیل در 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 مراجعه کنید.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : saedbfd 17:03 1399/12/09

سوال در مورد نحوه ارسال ایمیل در Asp.net Core قبلا پرسیده شده و پاسخ هم داده شده.

ارسال ایمیل در 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 شما باید به این شکل باشد:

 

ارسال ایمیل در asp

 

کنترلر 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 ارسال خواهد شد.

 

سورس پروژه

به این پاسخ امتیاز بدهید    1
امتیاز: 1664 رتبه: 1
4 نظر
Hamnava : سلام و ممنون از پاسخ تون. ولی وقتی من این کارا رو کردم یه صفحه با کلی ایرر باز شد و میگه که : SmtpException: The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.0 Authentication Required حالا من نمیدونم این از چه اس؟؟ میشه لطفا شما نظر بدین!!

امتیاز کاربر : 0   رتبه کاربر : 7066   تاریخ ثبت : 08:26 1399/12/09
Hamnava : من فقط آدرس ایمیل و کلمه عبور فرستنده و ایمیل گیرنده را تبدیل کردم و بقیه همه یکسان با کد های شما می باشد حالا نمیدونم این ایرر چرا ظاهر شد. گرچه قبلا دو کد دیگه که از استک اورفلو و یوتیوب گرفته بودم هم همین ایرر رو میداد ولی دلیلشو نمیدونم...

امتیاز کاربر : 0   رتبه کاربر : 7066   تاریخ ثبت : 08:49 1399/12/09
saedbfd : سورس رو براتون قرار دادم. دانلود کنید و عینا کدها رو استفاده کنید. ضمنا کدها رو با دقت بخونید هر جا نوشته شده yourpassword یا yourusername یا youremail اطلاعات خودتون رو بنویسید. نکته بعد اینکه ایمیل فرستنده حتما باید سرویس جمیل باشه.

امتیاز کاربر : 1664   رتبه کاربر : 1   تاریخ ثبت : 08:57 1399/12/09
Hamnava : از همون سورس خود شما استفاده کردم و فقط جای همونا را آپدیت کردم ولی همون ایرر رو میده

امتیاز کاربر : 0   رتبه کاربر : 7066   تاریخ ثبت : 11:32 1399/12/09
ادامه نظرات ...
پاسخ دهنده : saedbfd 01:31 1399/12/10

با توجه به خطایی که شما در بخش نظرات برای پاسخ قبلی مطرح کردید خطای شما، خطای زیر هست :

SmtpException: The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.0 Authentication Required

این خطا مربوط به کدنویسی نیست و کدهای شما صحیح هست. این خطا دلایلی مثل اشتباه بودن رمز عبور، سطح امنیتی بالای ایمیل شما و ... داره که میتونید توی این لینک راه حل ها رو مطالعه کنید.

به این پاسخ امتیاز بدهید    1
امتیاز: 1664 رتبه: 1
1 نظر
Hamnava : ممنون از شما مشکل از همون امنیت اکانت جیمیل بود

امتیاز کاربر : 0   رتبه کاربر : 7066   تاریخ ثبت : 09:44 1399/12/11
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود