最近在做项目中遇到了邮件提醒的功能,具体的用户需求是,在平常的高校中,院长发布公告或者任务的时候,接受者不仅可以在学校官网上接受,而且还可以以邮件的形式接受,根据此需求,小编经过两个小时的奋战,终于出结果了,这次也玩转了下关于邮件方面类的操作。
我们也可以试想,平常我们在写邮件的时候,基本上也就是处理上述的几个操作,写写邮件正文、主题,添加下收件人和附件,最后发送操作。
我把所有的操作全部封装到了一个Email类中,以后用的时候,直接调用即可。
using System; using System.Collections.Generic; using System.Linq; using System.Net.Mail; using System.Text; using System.Threading; using System.Threading.Tasks; /// <summary> /// Email类,创建了发送邮件和邮件信息的对象操作 /// </summary> class Email { #region 属性操作 //163邮箱是smtp.163 QQ是smtp.qq.com string Estmp;//smtp服务器 string Efrom;//发件人地址 string Epwd;//发件人密码 string[] Eto;//收件人集合 string Esubject;//邮件标题 string Ebody;//邮件正文内容 //string[] Epath;//附件地址集合 #endregion #region 构造函数 /// <summary> /// 邮件的构造函数 /// </summary> /// <param name="Esmtp">服务器设置</param> /// <param name="Efrom">发件人地址</param> /// <param name="Epwd">发件人密码</param> /// <param name="Eto">收件人地址</param> /// <param name="Esubject">主题</param> /// <param name="Ebody">正文</param> public Email(string Esmtp, string Efrom, string Epwd, string[] Eto, string Esubject, string Ebody) { this.Efrom = Efrom; this.Estmp = Esmtp; this.Epwd = Epwd; this.Eto = Eto; this.Esubject = Esubject; this.Ebody = Ebody; } #endregion #region 创建一个发送对象的Client /// <summary> /// 创建一个发送对象的Client /// </summary> /// <returns></returns> public SmtpClient CreateClient() { //创建smtpClient对象 System.Net.Mail.SmtpClient client = new SmtpClient(); //设定服务器 client.Host = Estmp; //DefaultCredentials 是否随请求一起发送。 client.UseDefaultCredentials = false; //基于身份的验证 client.Credentials = new System.Net.NetworkCredential(Efrom, Epwd); //电子邮件通过网络发送到smtp邮件服务器 client.DeliveryMethod = SmtpDeliveryMethod.Network; return client; } #endregion #region 创建一个MailMessage对象 /// <summary> /// 创建一个MailMessage对象 /// </summary> /// <returns></returns> public MailMessage CreateMessage(string from, string to) { //创建一个MailMessage对象 MailMessage message = new MailMessage(from, to); //设置信息的正文 message.Body = Ebody; //设置信息的标题 message.Subject = Esubject; //邮件以html格式输出 message.IsBodyHtml = true; //邮件的正文格式为UTF8 message.BodyEncoding = System.Text.Encoding.UTF8; return message; } #endregion #region 发送邮件操作 /// <summary> /// 发送邮件方法 /// </summary> /// <returns></returns> public bool SendMail() { for (int i = 0; i < Eto.Length; i++) { SmtpClient Client = CreateClient(); Client.Send(CreateMessage(Efrom, Eto[i])); } return true; } #endregion }
看一下客户端是如何调用的。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net.Mail; /// <summary> /// 测试类 /// </summary> class Program { static void Main(string[] args) { //收件人地址集合 string [] a={ "XXXXXX@QQ.COM"}; Email email = new Email("smtp.163.com", "发件人地址", "发件人密码",a, "你好吗", "我很好"); //发送邮件操作 email.SendMail(); Console.WriteLine("发送成功"); } }
总结
本来上述发送的过程是可以采取异步的形式进行优化的,但是小编调试了很久,不知道问题出在哪里,有知情者,可以相互学习一下。
原文:http://blog.csdn.net/luckyzhoustar/article/details/41910585