发送邮件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下载

原文地址:https://www.cnblogs.com/waitingfor/p/2308885.html