برنامه نویس وب


دوشنبه 23 مهر
MVC

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

یکشنبه, 15 فروردین 1395

برای ارسال ایمیل در asp.net mvc کافیه یک کلاس به پروژه اضافه کنیم و همچنین کنترلر و پارشیال ویو مربوطه، که در پارشیال ویو قالب ایمیلی که می خواهیم بفرستیم با کدهای razor و html  و css می سازیم در ادامه کدهای مربوطه را قرار میدم.

یک کلاس به پروژه اضافه کنید و کدهای  زیر در کلاس قرار بدید.


public class SendEmail
    {
        public static void Send(string To,string Subject,string Body)
        {
            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
            mail.From = new MailAddress("EmailAddress","SiteName");
            mail.To.Add(To);
            mail.Subject = Subject;
            mail.Body = Body;
            mail.IsBodyHtml = true;

            SmtpServer.Port = 587;
            SmtpServer.Credentials = new System.Net.NetworkCredential("EmailAddress", "Password");
            SmtpServer.EnableSsl = true;

            SmtpServer.Send(mail);

        }
    }


فضای نام MailMessage در System.Net.Mail هست، ورودی متد هم ایمیل گیرنده و موضوع ایمیل و محتوای ایمیل هست ، در قسمت EmailAddress هم آدرس ایمیلی که می خواهیم با استفاده از اون ایمیل ارسال کنیم را می گذاریم و همچنین پسورد ایمیل مون در قسمت Password می گذاریم.

بعد از ساخت کلاس یک کنترلر برای ارسال ایمیل ایجاد می کنیم و یک اکشن درون آن قرار میدیم که یک پارشیال ویو بهمون برمیگردونه که حاوی کدهای html هست و محتوا و قالب ایمیل تعیین می کند، در ضمن می توانیم چندین اکشن داشته باشیم و هر کدام یک پارشیال ویو برگردونند.


public ActionResult ActionName()
        {
            return PartialView();
        }

@model Model

<div style="width:100%;direction:rtl;font-family:Tahoma;">
    <img src="http://upload.com/logo.png" style="float:left;" />
    <h2 style="color:#ff0000;">درود @Model.Name عزیز </h2>
    <hr />
    <br />
    <p>
        این ایمیل از طرف سایت <a href="http://www.sitename.com" style="text-decoration:none;">sitename</a> فرستاده شده است.
    </p>
</
div>


فقط توجه داشته باشید که اگر عکسی در اینجا می گذارید باید آدرسی بذارید که از طریق مرورگر بشه دیدش و نمیشه با آدرس دهی محلی عکسی لود کرد.

در ادامه کدهای ارسال ایمیل می گذاریم این کدها را هر جا که نیاز بود میشه استفاده کرد.


            string Body = PartialToStringClass.RenderPartialView("ControllerName", "ActionName", model);
            SendEmail.Send("ToEmailAddress", "Subject", Body);


با استفاده از RenderPartialView پارشیال ویویی که ساخته بودیم را درون یک متغیر string میریزیم و ایمیل را ارسال می کنیم.


public static class PartialToStringClass
    {

        public static string RenderPartialView(string controllerName, string partialView, object model)
        {
            var context = new HttpContextWrapper(System.Web.HttpContext.Current) as HttpContextBase;

            var routes = new System.Web.Routing.RouteData();
            routes.Values.Add("controller", controllerName);

            var requestContext = new RequestContext(context, routes);

            string requiredString = requestContext.RouteData.GetRequiredString("controller");
            var controllerFactory = ControllerBuilder.Current.GetControllerFactory();
            var controller = controllerFactory.CreateController(requestContext, requiredString) as ControllerBase;

            controller.ControllerContext = new ControllerContext(context, routes, controller);

            var ViewData = new ViewDataDictionary();

            var TempData = new TempDataDictionary();

            ViewData.Model = model;

            using (var sw = new StringWriter())
            {
                var viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, partialView);
                var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, ViewData, TempData, sw);

                viewResult.View.Render(viewContext, sw);
                return sw.GetStringBuilder().ToString();
            }
        }

    }


فقط توجه داشته باشید که اگر از جیمیل برای ارسال ایمیل استفاده می کنید برای بار اول باید وارد اکانت جیمیل تان بشوید و دسترسی این کار بدید در غیر اینصورت می توانید میل سرور های هاست استفاده کنید .

 



نظرات

Drag to order
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

اکبراکبر

سلام ممنون از سایت قشنگ و زیباتون مطالبتون جالب و توی کمتر سایتی از این مطالب پیدا میشه

   پاسخ: قربانت heart


حسینحسین

خیلی عالی فقط کلاس PartialToStringClass فکر نکنم به صورت پیشفرض توی داتنت باشه؟

   پاسخ: با تشکر از توجه شما مطلب ویرایش شد