我的见解:

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

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

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

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

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

  1. using System;
  2. using System.IO;
  3. using System.Net.Mail;
  4. using System.Net.Mime;
  5.  
  6. namespace DllLibrary.SendEmail
  7. {
  8. /// <summary>
  9. /// 发送邮件的类
  10. /// </summary>
  11. public class Email
  12. {
  13. private MailMessage mMailMessage; //主要处理发送邮件的内容(如:收发人地址、标题、主体、图片等等)
  14. private SmtpClient mSmtpClient; //主要处理用smtp方式发送此邮件的配置信息(如:邮件服务器、发送端口号、验证方式等等)
  15. private int mSenderPort; //发送邮件所用的端口号(htmp协议默认为25)
  16. private string mSenderServerHost; //发件箱的邮件服务器地址(IP形式或字符串形式均可)
  17. private string mSenderPassword; //发件箱的密码
  18. private string mSenderUsername; //发件箱的用户名(即@符号前面的字符串,例如:hello@163.com,用户名为:hello)
  19. private bool mEnableSsl; //是否对邮件内容进行socket层加密传输
  20. private bool mEnablePwdAuthentication; //是否对发件人邮箱进行密码验证
  21.  
  22. ///<summary>
  23. /// 构造函数
  24. ///</summary>
  25. ///<param name="server">发件箱的邮件服务器地址</param>
  26. ///<param name="toMail">收件人地址(可以是多个收件人,程序中是以“;"进行区分的)</param>
  27. ///<param name="fromMail">发件人地址</param>
  28. ///<param name="subject">邮件标题</param>
  29. ///<param name="emailBody">邮件内容(可以以html格式进行设计)</param>
  30. ///<param name="username">发件箱的用户名(即@符号前面的字符串,例如:hello@163.com,用户名为:hello)</param>
  31. ///<param name="password">发件人邮箱密码</param>
  32. ///<param name="port">发送邮件所用的端口号(htmp协议默认为25)</param>
  33. ///<param name="sslEnable">true表示对邮件内容进行socket层加密传输,false表示不加密</param>
  34. ///<param name="pwdCheckEnable">true表示对发件人邮箱进行密码验证,false表示不对发件人邮箱进行密码验证</param>
  35. public Email(string server, string toMail, string fromMail, string subject, string emailBody, string username, string password, string port, bool sslEnable, bool pwdCheckEnable)
  36. {
  37. try
  38. {
  39. mMailMessage = new MailMessage();
  40. mMailMessage.To.Add(toMail);
  41. mMailMessage.From = new MailAddress(fromMail);
  42. mMailMessage.Subject = subject;
  43. mMailMessage.Body = emailBody;
  44. mMailMessage.IsBodyHtml = true;
  45. mMailMessage.BodyEncoding = System.Text.Encoding.UTF8;
  46. mMailMessage.Priority = MailPriority.Normal;
  47. this.mSenderServerHost = server;
  48. this.mSenderUsername = username;
  49. this.mSenderPassword = password;
  50. this.mSenderPort = Convert.ToInt32(port);
  51. this.mEnableSsl = sslEnable;
  52. this.mEnablePwdAuthentication = pwdCheckEnable;
  53. }
  54. catch (Exception ex)
  55. {
  56. throw ex;
  57. //Console.WriteLine(ex.ToString());
  58. }
  59. }
  60.  
  61. ///<summary>
  62. /// 添加附件
  63. ///</summary>
  64. ///<param name="attachmentsPath">附件的路径集合,以分号分隔</param>
  65. public void AddAttachments(string attachmentsPath)
  66. {
  67. try
  68. {
  69. string[] path = attachmentsPath.Split(';'); //以什么符号分隔可以自定义
  70. Attachment data;
  71. ContentDisposition disposition;
  72. for (int i = ; i < path.Length; i++)
  73. {
  74. data = new Attachment(path[i], MediaTypeNames.Application.Octet);
  75. disposition = data.ContentDisposition;
  76. disposition.CreationDate = File.GetCreationTime(path[i]);
  77. disposition.ModificationDate = File.GetLastWriteTime(path[i]);
  78. disposition.ReadDate = File.GetLastAccessTime(path[i]);
  79. mMailMessage.Attachments.Add(data);
  80. }
  81. }
  82. catch (Exception ex)
  83. {
  84. throw ex;
  85. //Console.WriteLine(ex.ToString());
  86. }
  87. }
  88.  
  89. /// <summary>
  90. /// 邮件的发送
  91. /// </summary>
  92. /// <returns>发送成功返回true,否则返回false</returns>
  93. public bool Send()
  94. {
  95. try
  96. {
  97. if (mMailMessage != null)
  98. {
  99. mSmtpClient = new SmtpClient();
  100. //mSmtpClient.Host = "smtp." + mMailMessage.From.Host;
  101. mSmtpClient.Host = this.mSenderServerHost;
  102. mSmtpClient.Port = this.mSenderPort;
  103. mSmtpClient.UseDefaultCredentials = false;
  104. mSmtpClient.EnableSsl = this.mEnableSsl;
  105. if (this.mEnablePwdAuthentication)
  106. {
  107. System.Net.NetworkCredential nc = new System.Net.NetworkCredential(this.mSenderUsername, this.mSenderPassword);
  108. //mSmtpClient.Credentials = new System.Net.NetworkCredential(this.mSenderUsername, this.mSenderPassword);
  109. //NTLM: Secure Password Authentication in Microsoft Outlook Express
  110. mSmtpClient.Credentials = nc.GetCredential(mSmtpClient.Host, mSmtpClient.Port, "NTLM");
  111. }
  112. else
  113. {
  114. mSmtpClient.Credentials = new System.Net.NetworkCredential(this.mSenderUsername, this.mSenderPassword);
  115. }
  116. mSmtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
  117. mSmtpClient.Send(mMailMessage);
  118. }
  119. }
  120. catch
  121. {
  122. return false;
  123. }
  124. return true;
  125. }
  126. }
  127. }

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

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text.RegularExpressions;
  5. using System.Web;
  6. using System.Web.Mvc;
  7. using System.Web.Security;
  8. using Test.Models;
  9. using DllLibrary.SendEmail;//引入对应命名空间
  10.  
  11. namespace Test.Controllers
  12. {
  13. public class HomeController : Controller
  14. {
  15.  
  16. /// <summary>
  17. /// 发送邮件
  18. /// </summary>
  19. /// <param name="title">邮件主题</param>
  20. /// <param name="email">要发送对象的邮箱</param>
  21. /// <param name="content">邮件内容</param>
  22. /// <returns></returns>
  23. public ActionResult SendMail(string title, string email, string content)
  24. {
  25. string senderServerIp = "smtp.163.com"; //使用163代理邮箱服务器(也可是使用qq的代理邮箱服务器,但需要与具体邮箱对相应)
  26. string toMailAddress = email; //要发送对象的邮箱
  27. string fromMailAddress = "XXXXXX@163.com";//你的邮箱
  28. string subjectInfo = title; //主题
  29. string bodyInfo = "<p>" + content + "</p>";//以Html格式发送的邮件
  30. string mailUsername = "XXX"; //登录邮箱的用户名
  31. string mailPassword = "xomeagyungxzhsxf"; //对应的登录邮箱的第三方密码(你的邮箱不论是163还是qq邮箱,都需要自行开通stmp服务)
  32. string mailPort = ""; //发送邮箱的端口号
  33. //string attachPath = "E:\\123123.txt; E:\\haha.pdf";
  34.  
  35. //创建发送邮箱的对象
  36. Email myEmail = new Email(senderServerIp, toMailAddress, fromMailAddress, subjectInfo, bodyInfo, mailUsername, mailPassword, mailPort, false, false);
  37.  
  38. //添加附件
  39. //email.AddAttachments(attachPath);
  40.  
  41. if (myEmail.Send())
  42. {
  43. return Content("<script>alert('邮件已成功发送!')</script>");
  44. }
  45. else
  46. {
  47. return Content("<script>alert('邮件发送失败!')</script>");
  48. }
  49.  
  50. }
  51.  
  52. }
  53. }

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

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

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

ASP.NET MVC 模块与组件(一)——发送邮件的更多相关文章

  1. ASP.NET MVC 模块与组件(二)——定制图片验证码

     本着简洁直接,我们就直奔主题吧! 下面是一个生成数字和字母随机组合的验证码类源代码: using System; using System.Drawing; using System.Drawing ...

  2. asp.net mvc 模型验证组件——FluentValidation

    asp.net mvc 模型验证组件——FluentValidation 示例 using FluentValidation; public class CustomerValidator: Abst ...

  3. asp.net MVC通用分页组件 使用方便 通用性强

    asp.net MVC通用分页组件 使用方便 通用性强   该分页控件的显示逻辑: 1 当前页面反色突出显示,链接不可点击 2 第一页时首页链接不可点击 3 最后一页时尾页链接不可点击 4 当前页面左 ...

  4. 理解ASP.NET MVC的DependencyResolver组件

    一.前言 DependencyResolver是MVC中一个重要的组件,从名字可以看出,它负责依赖对象的解析,可以说它是MVC框架内部使用的一个IOC容器.MVC内部很多对象的创建都是通过它完成的,或 ...

  5. 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC

    系列文章 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递 七天学会ASP.NET MVC (三)— ...

  6. 通过一个模拟程序让你明白ASP.NET MVC是如何运行的

    ASP.NET MVC的路由系统通过对HTTP请求的解析得到表示Controller.Action和其他相关的数据,并以此为依据激活Controller对象,调用相应的Action方法,并将方法返回的 ...

  7. 7 天玩转 ASP.NET MVC — 第 1 天

    0. 前言正如标题「7 天玩儿转 ASP.NET MVC」所言,这是个系列文章,所以将会向大家陆续推出 7 篇.设想一下,一天一篇,你将从一个愉快的周一开始阅读,然后在周末成为一个 ASP.NET M ...

  8. 7 天玩转 ASP.NET MVC - 第 1 天

    0. 前言 正如标题「7 天玩儿转 ASP.NET MVC」所言,这是个系列文章,所以将会向大家陆续推出 7 篇.设想一下,一天一篇,你将从一个愉快的周一开始阅读,然后在周末成为一个 ASP.NET ...

  9. ASP.NET MVC总结

    一.概述 1.单元测试的NUnit, MBUnit, MSTest, XUnit以及其他的框架 2.ASP.NET MVC 应用的默认目录结构有三个顶层目录: Controllers.Models.V ...

随机推荐

  1. 简单一招实现json数据可视化

    开发一个内部功能时碰到的需求,要把json数据在页面上展示出来,平时浏览器会安装jsonView这样的扩展来看json数据,但是程序要用到的话该怎么办呢?今天在网上搜索的时候,发现了这个小技巧,分享一 ...

  2. 利用C#自带组件强壮程序日志

    在项目正式上线后,如果出现错误,异常,崩溃等情况 我们往往第一想到的事就是查看日志 所以日志对于一个系统的维护是非常重要的 声明 正文中的代码只是一个栗子,一个非常简单的栗子,只是说明这个框架是怎么工 ...

  3. [备忘]没有为扩展名“.cshtml”注册的生成提供程序

    webconfig中配置 <compilation debug="true" targetFramework="4.5.1">       < ...

  4. ls /usr/linkapp 没反应

    ls /usr/linkapp ll /usr/linkapp  都是一样无反应 没有任何反应, ctrl + c /  ctrl + d 都不行 但是 ls /usr/linkapp/ | wc - ...

  5. Objective-C 外观模式--简单介绍和使用

    外观模式(Facade),为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用. 在以下情况下可以考虑使用外观模式: (1)设计初期阶段,应该有意识的将不同层分 ...

  6. [大数据之Spark]——快速入门

    本篇文档是介绍如何快速使用spark,首先将会介绍下spark在shell中的交互api,然后展示下如何使用java,scala,python等语言编写应用.可以查看编程指南了解更多的内容. 为了良好 ...

  7. Minor【 PHP框架】5.事件

    框架Github地址:github.com/Orlion/Minor (如果觉得还不错给个star哦(^-^)V) 框架作者: Orlion 知乎:https://www.zhihu.com/peop ...

  8. PHP浅复制与深复制

    原文链接:http://www.orlion.ga/731/ php用clone复制对象有一个问题,下面用代码来说明问题: class Foo{ public $bar; public $name; ...

  9. c#代码命名规则

    c#代码命名规则   以前没有考虑过命名的这个问题,写起来就是随心所欲,想怎么搞就怎么搞,在但是代码越写越乱,连自己都搞不清楚了,不得不进行认真考虑.参考了一些文章,形成以下想法:   一.      ...

  10. Android 文件读写

    一.分类 文件读写作为Android四大数据存储方式之一,又分为内部存储和外部存储两种: (1)内部存储(Internal storage): 总是可用. 文件默认情况存储在/data/data/包名 ...