آموزش ارسال ایمیل با postal در MVC 5
0 0

آموزش ارسال ایمیل با postal در MVC 5


آموزش ارسال ایمیل با postal در MVC 5

در این پست قصد داریم تا نحوه ارسال ایمیل با postal در MVC 5 را به صورت کامل آموزش دهیم.

روش های زیادی برای ارسال ایمیل وجود دارد و در سایت ، آموزش روش های مختلف ارسال ایمیل قرار داده شده است. در اینجا یکی از پرکاربرد ترین روش ارسال ایمیل که با استفاده از postal می باشد ،می پردازیم.

برای ارسال ایمیل ابتدا روی پروژه خود کلیک راست کنید و روی گزینه Manage NuGet Packages کلیک کنید.

سپس در پنجره باز شده postal را جستجو کنید توجه داشته باشید که به اینترنت متصل باشید.

طبق تصویر زیر postal انتخاب شده را با کلیک بر روی گزینه Install نصب کنید.

آموزش ارسال ایمیل با postal در MVC 5

سپس یک پوشه به نام ViewModels ایجاد کنید و  کلاسی به نام SendEmail ایجاد کنید و پراپرتی های زیر را تعریف کنید.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace SendEmailWithPostal.ViewModels
{
    public class SendEmail
    {
        public string Email { get; set; }
        public string Subject { get; set; }
        public string Body { get; set; }
        public string Link { get; set; }
    }
}

نکته:

شما می توانید به هر تعداد مواردی که در ارسال ایمیل نیاز دارید پراپرتی تعریف کنید.

سپس در هر کنترلی که می خواهید ایمیل ارسال کنید دو اکشن متد SendEmailWithPostal را تعریف کنید

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SendEmailWithPostal.ViewModels;
using Postal;

namespace SendEmailWithPostal.Controllers
{
    public class HomeController : Controller
    {
        // GET: Home
        public ActionResult Index()
        {
            return View();
        }

        [HttpGet]
        public ActionResult SendEmailWithPostal()
        {
            return View();
        }

        [HttpPost]
        public ActionResult SendEmailWithPostal([Bind(Include = "Email,Subject,Body,Link")] SendEmail sendEmail)
        {
            bool send = SendEmail(sendEmail.Email, sendEmail.Subject, sendEmail.Body, sendEmail.Link);
            if (send)
            {
                return Content("ایمیل ارسال شد");
            }
            else
            {
                return Content("ایمیل ارسال نشد");
            }

        }

        private bool SendEmail(string to, string Subject, string body, string link)
        {
            // قالب ایمیل رو داخل پرانتز مشخص می کنیم
            dynamic email = new Email("TemplateEmail");

            email.To = to;//who recieve email
            email.Title = Subject;//Email subject
            email.body = body;//Email Content
            email.link = link;//Link if exist

            try
            {
                email.Send();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

    }
}

اکشن اول جهت نمایش view و اکشن دوم جهت ارسال ایمیل می باشد

کار متد SendEmail برای ارسال ایمیل می باشد. و TemplateEmail که داخل پرانتز مشخص کردیم قالیب ایمیل می باشد که در آخر توضیح خواهیم داد.

نکته:

ما using Postal در بالای صفحه جهت ارسال ایمیل تعریف کردیم.

 

برای ایجاد view جهت ارسال ایمیل روی اکشن متد SendEmailWithPostal کلیک راست کنید و روی گزینه Add view کلیک کنید و یک view خالی ایجاد .

View فوق را به شکل زیر تغییر دهید.

@model SendEmailWithPostal.ViewModels.SendEmail
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>SendEmailWithPostal</title>
</head>
<body>
    <div>
        @using (Html.BeginForm())
        {
            <table dir="rtl">
                <tbody>
                    <tr>
                        <td>@Html.Label("ایمیل")</td>
                        <td>@Html.EditorFor(model => model.Email)</td>
                    </tr>
                    <tr>
                        <td>@Html.Label("موضوع")</td>
                        <td>@Html.EditorFor(model => model.Subject)</td>
                    </tr>
                    <tr>
                        <td>@Html.Label("متن پیام")</td>
                        <td>@Html.TextAreaFor(model => model.Body)</td>
                    </tr>
                    <tr>
                        <td>@Html.Label("لینک")</td>
                        <td>@Html.EditorFor(model => model.Link)</td>
                    </tr>
                </tbody>
            </table>
            <input type="submit" value="ارسال">
        }
    </div>
</body>
</html>

 view بالا را بر اساس کلاسی که ایجاد کرده بودیم کد نویسی کردیم.

کار ما اینجا به اتمام می رسد و فقط یک سری تنظیمات جهت ارسال ایمیل باید انجام دهیم. برای این کار webconfig موجود در root پروژه را باز کنید و تنظیمات زیر که مربوط به ایمیل فرستند و رمز عبور و ...  را به صورت زیر تظیم کنید. تنظیمات زیر بر اساس ایمیل سایت تنظیم شده.

<system.net>
    <mailSettings>
      <smtp deliveryMethod="network" from="info@karkoo.ir">
        <network host="mail.karkoo.ir" port="25" defaultCredentials="false" userName="info@karkoo.ir" password="123" />
      </smtp>
    </mailSettings>
  </system.net>

حال به سراق قالب ایمیل می رویم. هنگام نصب postal یک پوشه به نام Email در پوشه view ایجاد شده حال برای ایجاد قالب ایمیل داخل پوشه Email یک فایل TemplateEmail.cshtml ایجاد کنید و قالب ایمیل خود را طراحی کنید. که ما به شکل زیر طراحی کردیم.

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta charset="utf-8">
    <title>SendEmailWithPostal</title>
</head>
<body>
    <div>

            To: @ViewBag.To
            From: ایران گنج info@iranganj.ir
            Subject: @ViewBag.Title


            <div style="background: rgba(243, 215, 82, 0.50);padding: 25px;">

                <div style="font-family: Tahoma;text-align: right;direction: rtl;font-size: 90%;color: #808080;line-height: 2.5em;">
                    @* می توان یک تصویر رو در پستال جای داد *@
                    @Html.EmbedImage("~/images/logo.png")
                    <div style="font-weight: bold"></div> @ViewBag.body<br />

                    @if (!String.IsNullOrEmpty(ViewBag.link))
                    {
                        <div style="text-align: center;font-weight: bold;text-decoration:none">
                            <a href="@ViewBag.link">اینجا کلیک کنید</a>
                        </div>
                    }
                </div>
            </div>
    </div>
</body>
</html>

نکته:

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

دانلود

نویسنده حسین فتحی
گروه مطلب MVC
نوع مطلب سورس کد و آموزش
تاریخ انتشار ۲۸ اسفند ۱۳۹۳
منبع ایران گنج
تعداد نظرات ۱۶
قیمت کاربران عضو سایت
توضیح توجه:
  • زمانی که روی لینک دانلود کلیک می کنید لینک دانلود به مدت 24 ساعت معتبر خواهد بود
  • لینک های دانلود دوره های آموزشی تا پایان دوره قابل دانلود می باشد.
  • برای خارج کردن فایل ها از حالت فشرده از ورژن جدید نرم افزار winrar استفاده کنید.
  • برای خارج کردن فایل ها از حالت فشرده لینک های دانلودی که چندین قسمت می باشند فقط قسمت اول را از حالت فشرده خارج کنید.
  • لطفا توضیحات نوشته شده برای مطالب را با دقت بخوانید.
  • برای نمایش فیلم ها می توانید از نرم افزار هایی مانند Km Player , VLC Player یا Media Player Classic استفاده کنید.

نظر / سوال

Captcha
نظرات کاربران

  • arman

    سلام من با مشخصات جی میل تنظیم کردم ارسال نمیشه

    http://stackoverflow.com/questions/13974210/using-gmail-address-to-send-out-emails-with-postal

    پاسخ
    • مدیر

      سلام

      برای ارسال ایمیل از طریق جمیل باید شما تنظیمات جمیل رو در وب گانفیگ وارد کنید و همچنین در حساب جمیل خود یک تنظیمی انجام بدید که بتونید ایمیل ارسال کنید

      پاسخ
  • رضا نبی لو

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

    پاسخ
    • مدیر

      با سلام

      ایمیل info@iranganj.ir
       

      پاسخ
  • رضا نبی لو

    با سپاااااااااس فراوان از راهنمایی های شما دوست گرامی. مشکل بالاخره حل شد. 1- باید تو بخش کانفیگ "enableSsl="true کنیم 2- همچنین اگر از ایمیل شخصی استفاده میکنیم باید دسترسی App ها رو براش enable کنیم تا بتونه ازش استفاده کنه. به نظرتون درسته؟ من به این طریق از gmail خودم به ymail خودم ایمل فرستادم.

    پاسخ
    • مدیر

      سلام

      درست هستش. این ها تنظیمات اولیه هستش که شما باید قبل از ارسال ایمیل انجام می دادید

      پاسخ
  • رضا نبی لو

    با سلام و خسته نباشید دوباره. بخشید که من باز سرتون رو در میاروم. امیدوارم که خستتون نکرده باشم. بنابر توصیه شما بنده پروژه رو با setting شما اجرا کردم و trace کردن برنامه با خطا مواجه شدم. و میگه که usename , pass که برای "mail.karkoo.ir" وارد کردید اشتباهه. احساس میکنم باید اون هاستی که بهش میدیم valid باشه.

    پاسخ
    • مدیر

      سلام

      شما باید در وب کانفیگ ایمیل و رمز عبور و همچنین smtp ایمیل خود را وارد کنید
       

      پاسخ
      • رضا نبی لو

        با سپاس فراوان از زحمات و حوصله ای که برای حقیر به خرج دادید. با راهنمایی های شما مشکل حل شد.

        پاسخ
        • مدیر

          خواهش می کنم. خوشحال میشیم که بتونیم مشکلات کاربران رو حل کنیم.

          پاسخ
  • رضا نبی لو

    باز هم ممنونم از راهنماییتون. من سورس کد این بخش رو که در بالا هم لینکش اومده دانلود کردم. و باز هم سوال برام پیش اومد. الان اگر همین سورسی که شما بالا زحمتش روکشیدید و نوشتید، اجرا کنم، ایمیل ارسال میشه؟ من پروژه رو run کردم ولی متاسفانه باز هم پیام "ایمیل ارسال نشد" رو مشاهده کردم. البته ببخشید که من اینهمه سوال میکنم. پیرو پاسخ شما که فرمودید از localhost هم میشه ارسال کرد ، من تست کردم و دقیقا همون کدهای شما رو نوشتم. اصولا باید به ایمیلی که من متن و موضوعش رو در view مربوطه وارد میکنم، یک ایمیل فرستاده میشد، ولی متاسفانه همچین اتفاقی نمیافته!!!!! میشه لطفا راهنماییم کنید؟ برای پروژم به این بخش نیاز دارم. باز هم از زحماتی که میکشید ممنونم.

    پاسخ
    • مدیر

      سلام

      اگه سورسی که دانلود کردید رو اجرا کنید نباید مشکلی باشه. توسعه می کنم به جای ارسال ایمیل از یاهو از جیمیل استفاده کنید. همچنین برنامه رو خط به خط اجرا کنید تا در قسمت catch خطای عدم ارسال ایمیل رو مشاهده کنید.

      پاسخ
  • رضا نبی لو

    ممنون از پاسخ دهی سریعتون. :-) و سپاس فراوان بابت زحماتی که میکشید. مشکل اینجاست که من تمام مطالبی رو که ذکر فرمودید انجام دادم. به عنوان مثال فرستنده ایمیل خودم با yahoo و گیرنده ایمیل خودم در gmail اما متاسفانه "پیام ارسال نشد" رو مشاهده میکنم. امکانش هست راهنماییم کنید؟ برای بخش Confirm Email پروژم نیاز ضروری دارم.

    پاسخ
    • مدیر

      سلام

      تنظیمات وب کانفیگ رو چک کنید برای ارسال ایمیل از یاهو باید از پورت رو 465 و همچنین باید از smtp.yahoo.com تنظیم کنید.

      پاسخ
  • رضا نبی لو

    ممنون از آموزش خوبتون.

    می خواستم بدونم که برای ارسال ایم با postal حتما باید application رو آپلود کنیم و از آدرس و هاست حقیقی استفاده کنیم یا اینکه از روی سیستم خودمون (localhost) هم میشه این کار رو انجام داد؟

    پاسخ
    • مدیر

      سلام

      مشکلی نیست میتونید تو لوکال هم ایمیل ارسال کنید
       

      پاسخ