你的位置:首页 > ASP.net教程

[ASP.net教程]ASP.NET MVC 模块与组件(一)——发送邮件


   

  我的见解:

  模块化与组件化是编程的一种思想:提高代码的重用性,提高开发效率。

  常见的模块化就是函数与各种类型的封装,若是代码具有更高的重用价值(能够提供给别人使用),建议可以考虑封装成动态链接库(dll),直接引用使用。

  常见的组件化就是将各种需求功能封装成一系列完整的文档(比模块化要求更高、更完整),要用的时候直接引用对应的文件就可以使用。

 

  说了那么多,我们就直奔今天的主题:在用ASP.NET 技术开发Web网站的时候,如何实现发送邮件的功能?

  下面的是一个专门用来发送邮件的类(封装好了,可以直接编译成动态链接库,方便以后重复使用)(默认是以Html格式发送的邮件)

using System;using System.IO;using System.Net.Mail;using System.Net.Mime;namespace DllLibrary.SendEmail{  /// <summary>  /// 发送邮件的类  /// </summary>  public class Email  {    private MailMessage mMailMessage;  //主要处理发送邮件的内容(如:收发人地址、标题、主体、图片等等)    private SmtpClient mSmtpClient; //主要处理用smtp方式发送此邮件的配置信息(如:邮件服务器、发送端口号、验证方式等等)    private int mSenderPort;  //发送邮件所用的端口号(htmp协议默认为25)    private string mSenderServerHost;  //发件箱的邮件服务器地址(IP形式或字符串形式均可)    private string mSenderPassword;  //发件箱的密码    private string mSenderUsername;  //发件箱的用户名(即@符号前面的字符串,例如:hello@163.com,用户名为:hello)    private bool mEnableSsl;  //是否对邮件内容进行socket层加密传输    private bool mEnablePwdAuthentication; //是否对发件人邮箱进行密码验证    ///<summary>    /// 构造函数    ///</summary>    ///<param name="server">发件箱的邮件服务器地址</param>    ///<param name="toMail">收件人地址(可以是多个收件人,程序中是以“;"进行区分的)</param>    ///<param name="fromMail">发件人地址</param>    ///<param name="subject">邮件标题</param>    ///<param name="emailBody">邮件内容(可以以html格式进行设计)</param>    ///<param name="username">发件箱的用户名(即@符号前面的字符串,例如:hello@163.com,用户名为:hello)</param>    ///<param name="password">发件人邮箱密码</param>    ///<param name="port">发送邮件所用的端口号(htmp协议默认为25)</param>    ///<param name="sslEnable">true表示对邮件内容进行socket层加密传输,false表示不加密</param>    ///<param name="pwdCheckEnable">true表示对发件人邮箱进行密码验证,false表示不对发件人邮箱进行密码验证</param>    public Email(string server, string toMail, string fromMail, string subject, string emailBody, string username, string password, string port, bool sslEnable, bool pwdCheckEnable)    {      try      {        mMailMessage = new MailMessage();        mMailMessage.To.Add(toMail);        mMailMessage.From = new MailAddress(fromMail);        mMailMessage.Subject = subject;        mMailMessage.Body = emailBody;        mMailMessage.IsBodyHtml = true;        mMailMessage.BodyEncoding = System.Text.Encoding.UTF8;        mMailMessage.Priority = MailPriority.Normal;        this.mSenderServerHost = server;        this.mSenderUsername = username;        this.mSenderPassword = password;        this.mSenderPort = Convert.ToInt32(port);        this.mEnableSsl = sslEnable;        this.mEnablePwdAuthentication = pwdCheckEnable;      }      catch (Exception ex)      {        throw ex;        //Console.WriteLine(ex.ToString());      }    }    ///<summary>    /// 添加附件    ///</summary>    ///<param name="attachmentsPath">附件的路径集合,以分号分隔</param>    public void AddAttachments(string attachmentsPath)    {      try      {        string[] path = attachmentsPath.Split(';'); //以什么符号分隔可以自定义        Attachment data;        ContentDisposition disposition;        for (int i = 0; i < path.Length; i++)        {          data = new Attachment(path[i], MediaTypeNames.Application.Octet);          disposition = data.ContentDisposition;          disposition.CreationDate = File.GetCreationTime(path[i]);          disposition.ModificationDate = File.GetLastWriteTime(path[i]);          disposition.ReadDate = File.GetLastAccessTime(path[i]);          mMailMessage.Attachments.Add(data);        }      }      catch (Exception ex)      {        throw ex;        //Console.WriteLine(ex.ToString());      }    }    /// <summary>    /// 邮件的发送    /// </summary>    /// <returns>发送成功返回true,否则返回false</returns>    public bool Send()    {      try      {        if (mMailMessage != null)        {          mSmtpClient = new SmtpClient();          //mSmtpClient.Host = "smtp." + mMailMessage.From.Host;          mSmtpClient.Host = this.mSenderServerHost;          mSmtpClient.Port = this.mSenderPort;          mSmtpClient.UseDefaultCredentials = false;          mSmtpClient.EnableSsl = this.mEnableSsl;          if (this.mEnablePwdAuthentication)          {            System.Net.NetworkCredential nc = new System.Net.NetworkCredential(this.mSenderUsername, this.mSenderPassword);            //mSmtpClient.Credentials = new System.Net.NetworkCredential(this.mSenderUsername, this.mSenderPassword);            //NTLM: Secure Password Authentication in Microsoft Outlook Express            mSmtpClient.Credentials = nc.GetCredential(mSmtpClient.Host, mSmtpClient.Port, "NTLM");          }          else          {            mSmtpClient.Credentials = new System.Net.NetworkCredential(this.mSenderUsername, this.mSenderPassword);          }          mSmtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;          mSmtpClient.Send(mMailMessage);        }      }      catch      {        return false;      }      return true;    }  }}

View Code

  使用这个发送邮箱类的实例代码:

using System;using System.Collections.Generic;using System.Linq;using System.Text.RegularExpressions;using System.Web;using System.Web.Mvc;using System.Web.Security;using Test.Models;using DllLibrary.SendEmail;//引入对应命名空间namespace Test.Controllers{  public class HomeController : Controller  {      /// <summary>    /// 发送邮件    /// </summary>    /// <param name="title">邮件主题</param>    /// <param name="email">要发送对象的邮箱</param>    /// <param name="content">邮件内容</param>    /// <returns></returns>     public ActionResult SendMail(string title, string email, string content)    {        string senderServerIp = "smtp.163.com";  //使用163代理邮箱服务器(也可是使用qq的代理邮箱服务器,但需要与具体邮箱对相应)        string toMailAddress = email;       //要发送对象的邮箱        string fromMailAddress = "XXXXXX@163.com";//你的邮箱        string subjectInfo = title;         //主题        string bodyInfo = "<p>" + content + "</p>";//以Html格式发送的邮件        string mailUsername = "XXX";       //登录邮箱的用户名        string mailPassword = "xomeagyungxzhsxf"; //对应的登录邮箱的第三方密码(你的邮箱不论是163还是qq邮箱,都需要自行开通stmp服务)        string mailPort = "25";           //发送邮箱的端口号        //string attachPath = "E:\\123123.txt; E:\\haha.pdf";        //创建发送邮箱的对象        Email myEmail = new Email(senderServerIp, toMailAddress, fromMailAddress, subjectInfo, bodyInfo, mailUsername, mailPassword, mailPort, false, false);                //添加附件        //email.AddAttachments(attachPath);                if (myEmail.Send())        {          return Content("<script>alert('邮件已成功发送!')</script>");        }        else        {          return Content("<script>alert('邮件发送失败!')</script>");        }    }      }}

View Code

  简单说明:要发送邮件,需要开通一个stmp服务的邮箱号。(可以到163官网申请一个163邮箱,并且开通stmp服务就可以了(注:示例代码中所使用的密码是在开通stmp服务时,单独发送的第三方登录密码,而不是登录邮箱的密码))

  好了,这次分享就到这里了,下次继续。。。

  <我的博客主页>:http://www.cnblogs.com/forcheng/