我做了一個郵件發送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了
預覽一哈