發送郵件DEMO -------mvc post 后 清空表單數據




  我做了一個郵件發送demo  

  具體的步驟如下:

  1、首先創建一個實體類   

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace SendMailMessage.Models
{
public class EmailModel
{
[DisplayName("收件人")]
[Required(ErrorMessage = "收件人不允許為空!")]
[RegularExpression(@"(?i)(<[^>]+>|[\w_])*@[\w.-]+\.\w+",ErrorMessage="Emai格式不正確")]
public string receiver { get; set; }
[DisplayName("主題")]
[Required(ErrorMessage = "主題不允許為空!")]
public string subject { get; set; }
[DisplayName("信件內容")]
[Required(ErrorMessage = "信件內容不允許為空!")]
public string body { get; set; }
}
}

 2、Controller的內容如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SendMailMessage.Uitls;
using SendMailMessage.Models;
namespace SendMailMessage.Controllers
{
public class HomeController : Controller
{
//
// GET: /Home/

public ActionResult Index()
{

return View();
}
[HttpPost]
public ActionResult Index(EmailModel model)
{

try
{
if (ModelState.IsValid)
{
if (EMail.SendEmail(model.receiver, null, null, model.subject, model.body, null))
{
// TempData["message"] = "發送成功";
@ViewBag.message = "發送成功";
ModelState.Clear();//model信息 (表單數據)
}
else
{
// TempData["message"] = "發送失敗";
@ViewBag.message = "發送失敗";
}
}
}
catch(Exception e)
{
ModelState.AddModelError("receiver", e.Message);
}

return View("Index");
// RedirectToAction("Index");
}

}
}

注:ModelState.Clear();//清空model   清空表單的方式有多種  也可刷新頁面  使用RedirectToAction("Index");   重新跳轉 就需要 TempData["message"]保存提示信息了(也可以使用 Session 或者Cookie)

3、發送Emai類

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net.Mail;
using System.Configuration;
using System.Net;
using System.Reflection;
using System.Text;

namespace SendMailMessage.Uitls
{
#region 郵件服務

/* 范例:
// 附件路徑
var filePath = @"O:\UploadImage\05_20110418_113900.bmp,O:\UploadImage\05_20110418_121224.bmp";

EMail email = new EMail("semeichenyan@sina.com.cn", null, null, "測試標題", "測試正文", filePath);
//EMail email = new EMail("semeichenyan@sina.com.cn", null, null, "測試標題", "測試正文", null);
//EMail email = new EMail("semeichenyan@sina.com.cn", "semeichenyan@sina.com.cn", "semeichenyan@sina.com.cn", "測試標題", "測試正文", null);
email.Send();
*/


public class EMail
{
// 實例化一個SmtpClient
//SmtpClient _smtpClient = new SmtpClient();

// 實例化一個郵件類
MailMessage _mailMessage = new MailMessage();

/// <summary>
/// 發件使用的郵箱地址
/// </summary>
private string _fromEmail = ConfigurationManager.AppSettings["EmailSender"].ToString();

/// <summary>
/// 發件郵箱地址密碼
/// </summary>
private string _senderPassword = ConfigurationManager.AppSettings["EmailServer_Pwd"].ToString();

/// <summary>
/// 顯示在郵件上的發件人名稱
/// </summary>
private string _displayName = ConfigurationManager.AppSettings["EmailSenderName"].ToString();

/// <summary>
/// 發件郵箱使用的服務器
/// </summary>
private string _smtp = ConfigurationManager.AppSettings["EmailServer"].ToString();

/// <summary>
/// 郵件的接收者
/// </summary>
private string ToEmail { set; get; }

/// <summary>
/// 抄送
/// </summary>
private string CC { set; get; }

/// <summary>
/// 密送
/// </summary>
private string Bcc { set; get; }

/// <summary>
/// 郵件標題
/// </summary>
private string Subject { set; get; }

/// <summary>
/// 郵件正文
/// </summary>
private string Body { set; get; }

/// <summary>
/// 附件
/// </summary>
private string Attachments { set; get; }



public EMail(string toEmail, string cc, string bcc, string subject, string body, string attachments)
{

CC = cc;
Bcc = bcc;
ToEmail = toEmail;
Subject = subject;
Body = body;
Attachments = attachments;

}
/// <summary>
/// 發送email
/// </summary>
/// <param name="toEmail">郵件的接收者,支持群發,多個地址之間用半角逗號分開</param>
/// <param name="cc">抄送,多個地址之間用半角逗號分開</param>
/// <param name="bcc">密送,多個地址之間用半角逗號分開</param>
/// <param name="subject">主題</param>
/// <param name="body">正文</param>
/// <param name="attachments">附件地址</param>
public static bool SendEmail(string toEmail, string cc, string bcc, string subject, string body, string attachments)
{
EMail email = new EMail(toEmail, cc, bcc, subject, body, attachments);
return email.Send();
}



/// <summary>
/// 郵件發送
/// </summary>
public bool Send()
{
Type type = typeof(SmtpClient);
SmtpClient _smtpClient = new SmtpClient();
//FieldInfo fi = type.GetField("localHostName", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField);
//string strLocalHostName = "";
//strLocalHostName = fi.GetValue(_smtpClient).ToString();
//strLocalHostName = System.Net.Dns.GetHostAddresses(strLocalHostName)[0].ToString();
//fi.SetValue(_smtpClient, strLocalHostName);

bool result = false;

try
{
// 將smtp的出站方式設為Network
_smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;

// smtp服務器是否啟用SSL加密
_smtpClient.EnableSsl = false;

// 指定smtp服務器地址
_smtpClient.Host = _smtp;

// 指定smtp服務器的端口,默認是25,如果采用默認端口,可省去
//smtp.Port = 25;

// 如果你的SMTP服務器不需要身份認證,則使用下面的方式,不過,目前基本沒有不需要認證的了
//smtp.UseDefaultCredentials = true;

// 如果需要認證,則用下面的方式
_smtpClient.Credentials = new NetworkCredential(_fromEmail, _senderPassword);

// 郵件的優先級,分為Low、Normal、 High,通常用Normal即可
_mailMessage.Priority = MailPriority.High;

// 收件方看到的郵件來源;第一個參數是發信人郵件地址,第二參數是發信人顯示的名稱,第三個參數是第二個參數所使用的編碼,如果指定不正確,則對方收到后顯示亂碼,936是簡體中文的codepage值
_mailMessage.From = new MailAddress(_fromEmail, _displayName, Encoding.GetEncoding(936));

// ReplyTo 表示對方回復郵件時默認的接收地址,即:你用一個郵箱發信,但卻用另一個來收信,后兩個參數的意義,同From
_mailMessage.ReplyTo = new MailAddress(_fromEmail, _displayName, Encoding.GetEncoding(936));

// 郵件的接收者,支持群發,多個地址之間用半角逗號分開
_mailMessage.To.Add(ToEmail);

// 抄送
if (!string.IsNullOrEmpty(CC))
{
_mailMessage.CC.Add(CC);
}

// 密送
if (!string.IsNullOrEmpty(Bcc))
{
_mailMessage.Bcc.Add(Bcc);
}

// 郵件標題
_mailMessage.Subject = Subject;

// 這里非常重要,如果你的郵件標題包含中文,這里一定要指定,否則對方收到的極有可能是亂碼
_mailMessage.SubjectEncoding = Encoding.GetEncoding(936);

// 郵件正文是否是HTML格式
_mailMessage.IsBodyHtml = true;

// 郵件正文的編碼,設置不正確,接收者會收到亂碼
_mailMessage.BodyEncoding = Encoding.GetEncoding(936);

// 郵件正文
_mailMessage.Body = Body;

// 附件
if (!string.IsNullOrEmpty(Attachments))
{
string[] attachmentsArray = Attachments.Split(',');

for (int i = 0; i < attachmentsArray.Length; i++)
{
_mailMessage.Attachments.Add(new Attachment(attachmentsArray[i]));
}
}

// 發送郵件
_smtpClient.Send(_mailMessage);
result = true;
}
catch (Exception ex)
{
result = false;
}

return result;
}
}

#endregion
}

 這個類比較混亂 還帶優化 希望大家見諒

 

4、view部分

@model SendMailMessage.Models.EmailModel

@{
ViewBag.Title = "Index";
}



<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>郵件發送</legend>

<div class="editor-label">
@Html.LabelFor(model => model.receiver)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.receiver)
@Html.ValidationMessageFor(model => model.receiver)
</div>

<div class="editor-label">
@Html.LabelFor(model => model.subject)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.subject)
@Html.ValidationMessageFor(model => model.subject)
</div>

<div class="editor-label">
@Html.LabelFor(model => model.body)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.body)
@Html.ValidationMessageFor(model => model.body)
</div>
@ViewBag.message

<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}

<div>
@Html.ActionLink("Back to List", "Index")
</div>

對了 忘記配置webconfig文件了

 <appSettings>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
<!-- 郵件服務組件 start -->
<!--發件使用的郵箱地址-->
<add key="EmailServer" value="smtp.126.com"/>
<!--發件使用的郵箱地址-->
<add key="EmailSender" value="********"/>
<!--發件郵箱地址密碼-->
<add key="EmailServer_Pwd" value="*****8"/>
<!--顯示在郵件上的發件人名稱-->
<add key="EmailSenderName" value="郵差"/>
<!-- 郵件服務組件 end -->
</appSettings>

 


ok了

預覽一哈

 

 DEMO下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM