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

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

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

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 3363
پاسخ دهنده : 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
امتیاز: 1654 رتبه: 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   رتبه کاربر : 7021   تاریخ ثبت : 08:26 1399/12/09
Hamnava : من فقط آدرس ایمیل و کلمه عبور فرستنده و ایمیل گیرنده را تبدیل کردم و بقیه همه یکسان با کد های شما می باشد حالا نمیدونم این ایرر چرا ظاهر شد. گرچه قبلا دو کد دیگه که از استک اورفلو و یوتیوب گرفته بودم هم همین ایرر رو میداد ولی دلیلشو نمیدونم...

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

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

امتیاز کاربر : 0   رتبه کاربر : 7021   تاریخ ثبت : 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
امتیاز: 1654 رتبه: 1
1 نظر
Hamnava : ممنون از شما مشکل از همون امنیت اکانت جیمیل بود

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