zoukankan      html  css  js  c++  java
  • 发送邮件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下载

  • 相关阅读:
    Binary Tree Inorder Traversal
    Populating Next Right Pointers in Each Node
    Minimum Depth of Binary Tree
    Majority Element
    Excel Sheet Column Number
    Reverse Bits
    Happy Number
    House Robber
    Remove Linked List Elements
    Contains Duplicate
  • 原文地址:https://www.cnblogs.com/waitingfor/p/2308885.html
Copyright © 2011-2022 走看看