最近在做项目中遇到了邮件提醒的功能,具体的用户需求是,在平常的高校中,院长发布公告或者任务的时候,接受者不仅可以在学校官网上接受,而且还可以以邮件的形式接受,根据此需求,小编经过两个小时的奋战,终于出结果了,这次也玩转了下关于邮件方面类的操作。
我们也可以试想,平常我们在写邮件的时候,基本上也就是处理上述的几个操作,写写邮件正文、主题,添加下收件人和附件,最后发送操作。
我把所有的操作全部封装到了一个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