آموزش ارسال ایمیل در MVC با استفاده از کانفیگ
آموزش ارسال ایمیل در MVC با استفاده از کانفیگ
در این پست میخواهیم نحوه ارسال ایمیل در Asp.net MVC از طریق کانفیگ را آموزش دهیم.
در MVC نحوه ارسال ایمیل به طریق های مختلفی انجام میشود. یکی از این روش ها ارسال به صورت تنظیم از طریق کانفیگ است که با آدرس دهی در آن میتوان پیام هایی را از طریق ایمیل ارسال کرد. امروز نحوه انجام این کار را آموزش میدهیم.
ابتدا یک پروژه از نوع MVC ایجاد میکنیم.
ابتدا فایل کانفیگ را باز کرده و کد زیر را به ان اضافه میکنیم.
<appSettings> <add key="webpages:Version" value="2.0.0.0" /> <add key="webpages:Enabled" value="false" /> <add key="PreserveLoginUrl" value="true" /> <add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" /> <add key="FromAddress" value="xxxxx@xxxxxxx.com"/> <add key="ToAddress" value="xxxxx@xxxxxxx.com" /> <add key="UserID" value="xxxxx@xxxxxxx.com"/> <add key="Password" value="xxxxxxx"/> <add key="ReplyTo" value="xxxxx@xxxxxxx.com"/> <add key="SMTPPort" value="587"/> <add key="EnableSSL" value="Yes"/> </appSettings>
نکته :
FromAddress و UserID باید آدرس خودتان را بنویسید.
ToAddress ادرس مقصد.
Password برای رمز عبور.
ReplyTo برای آدرس ها بیشتر .
وارد پوشه کنترلر میشویم و داخل فایل HomeController کدهای زیر را اضافه میکنیم.
public ActionResult Email() { return View(); } public ActionResult SendMail(string Subject, string Body) { EMail oMail = new EMail(); oMail.SendMail("Email", "xxxxx@xxxxxxx.com", new String[] { Subject, Body }); return Content("Success"); } }
سپس داخل پوشه Views یک صفحه با نام Email ایجاد میکنیم و کد زیر را داخل آن می نویسیم.
@using (Html.BeginForm("SendMail", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })) { <table> <tr> <td>موضوع :</td> <td> <input type="text" name="Subject" id="Subject"/> </td> </tr> <tr> <td>متن پیام :</td> <td> <textarea name="Body" id="Body" cols="5" rows="3"></textarea> </td> </tr> <tr> <td></td> <td> <input type="submit" value="ارسال" name="send" id="Send"/> </td> </tr> </table> }
در ادامه یک کلاس داخل پوشه Models ایجاد میکنیم با نام EMail و ابتدا فضای نام زیر را اضافه میکنیم.
using System.Net.Mail;
سپس داخل کلاس Email توابع کانفیگ را فراخوانی میکنیم.
private string FromAddress; private string strToAddress; private string strSmtpClient; private string UserID; private string Password; private string ReplyTo; private string SMTPPort; private Boolean bEnableSSL;
سپس در ادامه تابع داخلی زیر را اضافه می کنیم.
private void InitMail() { FromAddress = System.Configuration.ConfigurationManager.AppSettings.Get("FromAddress"); strToAddress = System.Configuration.ConfigurationManager.AppSettings.Get("ToAddress"); //strSmtpClient = System.Configuration.ConfigurationManager.AppSettings.Get("SmtpClient"); strSmtpClient = "smtp.gmail.com"; UserID = System.Configuration.ConfigurationManager.AppSettings.Get("UserID"); Password = System.Configuration.ConfigurationManager.AppSettings.Get("Password"); ReplyTo = System.Configuration.ConfigurationManager.AppSettings.Get("ReplyTo"); SMTPPort = System.Configuration.ConfigurationManager.AppSettings.Get("SMTPPort"); if (System.Configuration.ConfigurationManager.AppSettings.Get("EnableSSL").ToUpper() == "YES") { bEnableSSL = true; } else { bEnableSSL = false; } }
توجه داشته باشید که مقادیر مورد نیاز برای آدرس ایمیل و پسورد و .... را از داخل کانفیگ دریافت میکنه.
سپس برای اینکه با فایل کانفیگ کار میکنیم نیاز داریم تا از فرمت Xml استفاده کنیم. برای این کار کد زیر را می نویسیم .
public void SendMail(string messageId, string toAddress, string[] param) { XmlDocument xdoc = new XmlDocument(); string mailFormatxml = HttpContext.Current.Server.MapPath("\\") + "Mailformat.xml"; string subject = ""; string body = ""; XmlNode mailNode = default(XmlNode); int n = 0; if ((System.IO.File.Exists(mailFormatxml))) { xdoc.Load(mailFormatxml); mailNode = xdoc.SelectSingleNode("MailFormats/MailFormat[@Id='" + messageId + "']"); subject = mailNode.SelectSingleNode("Subject").InnerText; body = mailNode.SelectSingleNode("Body").InnerText; if ((param == null)) { throw new Exception("فرمت ایمیل ناشناس"); } else { for (n = 0; n <= param.Length - 1; n++) { body = body.Replace(n.ToString() + "?", param[n]); subject = subject.Replace(n.ToString() + "?", param[n]); } } InitMail(); dynamic MailMessage = new MailMessage(); MailMessage.From = new MailAddress(FromAddress); MailMessage.To.Add(strToAddress); MailMessage.Subject = subject; MailMessage.IsBodyHtml = true; MailMessage.Body = body; MailMessage.ReplyTo = new MailAddress(FromAddress); SmtpClient SmtpClient = new SmtpClient(); SmtpClient.Host = strSmtpClient; SmtpClient.EnableSsl = bEnableSSL; SmtpClient.Port = Convert.ToInt32(SMTPPort); SmtpClient.Credentials = new System.Net.NetworkCredential(UserID, Password); try { SmtpClient.Send(MailMessage); } catch (SmtpFailedRecipientsException ex) { for (int i = 0; i <= ex.InnerExceptions.Length; i++) { SmtpStatusCode status = ex.InnerExceptions[i].StatusCode; if ((status == SmtpStatusCode.MailboxBusy) | (status == SmtpStatusCode.MailboxUnavailable)) { System.Threading.Thread.Sleep(5000); SmtpClient.Send(MailMessage); } } } } }
نتیجه حاصل شده :
نظر / سوال