نحوه ارسال ایمیل در ASP NET Core 1.0

ASP.NET Core 1.0 یک راه انداز برای فریم ورک ASP.NET است که قابلیت پشتیبانی از فریم ورک قدیمی NET. و فریم ورک جدیدتر NET. Core را دارد. ASP.Net Core و NET. Core هر دو برای کار با انواع platformها طراحی شده اند و نسبت به فریم ورک کامل NET. حجم کمتری دارد و سریع تر است. بسیاری از APIهای NET. خیلی شبیه به یک فریم ورک کامل NET. هستند و توسعه دهندگان آنها تلاش زیادی می کنند تا این APIها کارایی در حد یک فریم ورک کامل داشته باشند. اگرچه از عواقب توسعه یک فریم ورک کوچک نسبت به فریم ورک کامل این است که ممکن است بعضی از کتابخانه ها را از دست بدهیم. در این آموزش به نحوه ارسال ایمیل در ASP NET خواهیم پرداخت.

در یکی از پروژه هایی که محققان روی آن کار می کردند نیاز به ارسال ایمیل از طریق یک برنامه وب (web application) بود. در یک فریم ورک قدیمی می توان از کلاس SmtpClient از فضای نام system.net.mail استفاده کرد. اما در فریم ورک Net. Core این قابلیت هنوز فراهم نیست.

برای رفع این مشکل ابتدا به گوگل سر زدیم که ببینیم چه کس دیگری به این مشکل برخورد کرده است و چگونه این مشکل را رفع کرده است. اما هیچ راه حل مناسبی برای این موضوع پیدا نشده بود. بالاخره توسط سایت GitHub با کتابخانه  MailKit آشنا شدیم. این کتابخانه توسط فردی به نام Jeffery Stedfast توسعه یافته است و از آنجا که به تازگی برای کار با Net. Core آپدیت شده است، بهترین راه حل برای ما بود.

در این مطلب به شما آموزش می دهیم که چگونه این کار را با استفاده از دو سناریو انجام می هیم. ابتدا ارسال مستقیم ایمیل از طریق یک رلهSMTP (relay و دوم به واسطه امکان ذخیره ایمیل در یک پوشه SMTP. هر دو روش روش ساده و کارآمدی به حساب می آیند.

اضافه کردن MailKit به پروژه ارسال ایمیل در ASP NET

قدم اول اضافه کردن ارجاعات (reference) به پکیج NuGet است. حال بهتر است از فایل project.jason  برای راه اندازی نیازمندی ها استفاده کنیم. ابتدا باید کتابخانه MailKit را -که فعلا نسخه beta6-1.3.0 آن موجود است- به بخش نیازمندی ها (dependency)  در فایل project.jason  اضافه کنید.

در برنامه وب ASP.NET Core،  نیازمندی ها باید مثل شکل زیر باشند. ( ارسال ایمیل در asp net )


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

زمانیکه تغییرات را اعمال می کنید Virtual Storage باید یک restore از پکیج های ضروری NuGet را نگه داری کند.

ارسال ایمیل در ASP NET با سرور SMTP

در این قسمت ما حداقل کد لازم برای اینکه یک ایمیل را به وسیله سرور SMTP ارسال کنید نشان می دهیم. برای این کار فایل MessageServices.cs را در برنامه وب خود باز کنید. باید در ابتدای فایل از سه عبارت using استفاده کنیم.

;using MailKit.Net.Smtp

;using MimeKit

;using MailKit.Security

متد SendEmailAsynch می تواند مانند قطعه کد زیر باشد.

public async Task SendEmailAsync(string email, string subject, string message)
{
    var emailMessage = new MimeMessage();
 
    emailMessage.From.Add(new MailboxAddress("Joe Bloggs", "jbloggs@example.com"));
    emailMessage.To.Add(new MailboxAddress("", email));
    emailMessage.Subject = subject;
    emailMessage.Body = new TextPart("plain") { Text = message };
 
    using (var client = new SmtpClient())
    {
        client.LocalDomain = "some.domain.com";                
        await client.ConnectAsync("smtp.relay.uri", 25, SecureSocketOptions.None).ConfigureAwait(false);
        await client.SendAsync(emailMessage).ConfigureAwait(false);
        await client.DisconnectAsync(true).ConfigureAwait(false);
    }

ابتدا یک شی از کلاس MimeMessage می سازیم که در آن ایمیلی را که می خواهیم بفرستیم نمایش می دهد. سپس می توانیم بعضی از propertyهای آن را set کنیم.

کلاس MimeMessage یک لیست از آدرس ها در متد From و لیست دیگری از آدرس ها در متد To دارد که می توان آنها را با فرستنده ها و گیرنده های ایمیل متناظر کرد. برای این مثال ما برای هر کدام از این متدها یک کلاس MailboxAddress فراخوانی کرده ایم. تابع سازنده MailboxAddress نام و آدرس ایمیل برای ارسال mailbox را به عنوان پارامتر می گیرد. در این مثال متد To آدرس ایمیلی را (به عنوان آرگومان) می گیرد که توسط caller به تابع SendEmailAsync فرستاده شده است.

سپس به ایمیل مورد نظر موضوع ایمیل(subject) را اضافه می کنیم و بعد از آن بدنه ایمیل را می سازیم. راه های گوناگونی برای ساختن و تعریف کردن بدنه ایمیل وجود دارد اما ما در این قسمت از یک راهکار ساده برای ساخت قسمت بدنه ایمیل با استفاده از ارسال متن به متد SendEmailAsync بهره برده ایم.

آخرین مرحله فرستادن ایمیل است و برای این کار از کلاس SmtpClient استفاده می کنیم. توجه داشته باشید که این کلاس مربوط به پکیج system.net.mail نیست بلکه بخشی از کتابخانه MailKit است.

یک نمونه از SmtpClient ساختیم که توسط عبارت using قابل دسترس شده است. زمانیکه ایمیل را فرستادیم دیگر قصد نداریم ارتباطمان با سرور SMTP را باز نگه داریم.  می توانید در صورت نیاز یک Local Domain را به منظور ارتباط با سرور SMTP تنظیم (set) کنید. این کار موجب نمایش مبدا پیام می شود.

سپس به صورت آسنکرون یا ناهمگام به سرور SMTP متصل می شویم. متد ConnectAsync می تواند uri مربوط به سرور SMTP را (به عنوان آرگومان) بگیرد یا اینکه مثل کاری که ما اینجا انجام دادیم با یک پورت و یک SSL سربارگذاری (over load ) شود. در این مثال هنگامی که سرور SMTP را تست می کنیم SSL ضروری نیست بنابراین آن را به صورت صریح (explicit) مشخص می کنیم.

در نهایت پیام را به صورت آسنکرون می فرستیم و سپس ارتباط را قطع می کنیم. در این مرحله ایمیل باید از طریق سرور SMTP ارسال شده و به مقصد رسیده باشد.

ارسال ایمیل در ASP NET توسط پوشه SMTP (SMTP pickup folder(

  همانطور که گفته شد ممکن است به جای ارسال مستقیم ایمیل از یک سرور SMTP ،آن را در یک پوشه SMTP که بر روی یک وب سرور اجرا می شود ذخیره کرد. ممکن است راه بهتری هم وجود داشته باشد اما ما این کار را به صورت زیر انجام دادیم.

public async Task SendEmailAsync(string email, string subject, string message)
{
    var emailMessage = new MimeMessage();
 
    emailMessage.From.Add(new MailboxAddress("Joe Bloggs", "jbloggs@example.com"));
    emailMessage.To.Add(new MailboxAddress("", email));
    emailMessage.Subject = subject;
    emailMessage.Body = new TextPart("plain") { Text = message };
 
    using (StreamWriter data = System.IO.File.CreateText("c:\\smtppickup\\email.txt"))
    {
        emailMessage.WriteTo(data.BaseStream);
    }
}

تنها تفاوت این کد با کد قبلی این است که در این کد از SmtpClient استفاده نمی شود. به جای آن پس از ساخت شی به نام emailMessage یک شی از کلاس steamwriter تعریف می کنیم که یک فایل متنی (text) در یک دایرکتوری محلی تولید می کند. سپس از متد MimeMessage.WriteTo برای تولید یک فایل ایمیل RFC822 در دایرکتوری pickup استفاده می کنیم.

نتیجه

MailKit یک کتابخانه خوب است که بسیاری از نیازهای ما را در این مطلب پاسخ می دهد. شواهدی وجود دارد که نشان می دهد تیم Microsoft در حال کار کردن بر روی Smtpclient است برای اینکه بتواند ASP.NET Core را پشتیبانی کند.

ارسال ایمیل در mvc

ورکشاپ رایگان دوره های تخصصی برنامه نویسی

شما این فرصت را دارید، با تکمیل فرم زیر، قبل از انتخاب دوره آموزشی مناسب خود، در ورکشاپ رایگان دوره های تخصصی برنامه نویسی شرکت کنید
  • این فیلد برای اعتبار سنجی است و باید بدون تغییر باقی بماند .

درباره‌ی محمد بروشکی

همچنین ببینید

ساخت اپلیکیشن سمت کاربر با فرمت Javascript

در این بخش از آموزش Web API با استفاده از HTML، Javascript و  Knockout.js   اپلیکیشنی …

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *