zoukankan      html  css  js  c++  java
  • 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;
            }
        }
    }
    复制代码

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

    复制代码
    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>");
                    }
    
            }
            
        }
    }
    复制代码

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

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

      <参考博客主页>:http://www.cnblogs.com/forcheng/

  • 相关阅读:
    六. 异常处理5.多重catch语句的使用
    六. 异常处理4.try和catch的使用
    六. 异常处理3.未被捕获的异常
    六. 异常处理2.异常类型
    对mysql数据库中字段为空的处理
    mysql 中实现多条数据同时更新
    java 用PDFBox 删除 PDF文件中的某一页
    java7 java MethodHandle解析
    【十四】jvm 性能调优实例
    【十三】jvm 性能调优工具之 jstack
  • 原文地址:https://www.cnblogs.com/wanzhongjun/p/6855193.html
Copyright © 2011-2022 走看看