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下载

  • 相关阅读:
    JavaScript Math
    从俄罗斯套娃开始的信封嵌套问题
    Educational Codeforces Round 80 A
    位运算的奇技淫巧(三)
    Educational Round 95 (Div. 2) A
    POJ 1985.Cow Marathon(DFS求树的直径模板题)
    Web开发初探(系统理解Web知识点)
    经典Python案例实现
    Codeforces Round #670 (Div. 2) 深夜掉分(A
    Problem B
  • 原文地址:https://www.cnblogs.com/waitingfor/p/2308885.html
Copyright © 2011-2022 走看看