c#异步发送邮件的类
c#异步发送邮件的类
发布时间:2016-12-28 来源:查字典编辑
摘要:首先要定义一个邮件信息的基类,如下所示:复制代码代码如下://////Basemessageclassusedforemails///pub...

首先要定义一个邮件信息的基类,如下所示:

复制代码 代码如下:

/// <summary>

/// Base message class used for emails

/// </summary>

public class Message

{

#region Constructor

/// <summary>

/// Constructor

/// </summary>

public Message()

{

}

#endregion

#region Properties

/// <summary>

/// Whom the message is to

/// </summary>

public virtual string To { get; set; }

/// <summary>

/// The subject of the email

/// </summary>

public virtual string Subject { get; set; }

/// <summary>

/// Whom the message is from

/// </summary>

public virtual string From { get; set; }

/// <summary>

/// Body of the text

/// </summary>

public virtual string Body { get; set; }

#endregion

}

然后定义一个邮件的发送类,使用Netmail的方式发送邮件,发送邮件时采用了.net中自带的线程池,

通过多线程来实现异步的发送,代码如下:

复制代码 代码如下:

/// <summary>

/// Utility for sending an email

/// </summary>

public class EmailSender : Message

{

#region Constructors

/// <summary>

/// Default Constructor

/// </summary>

public EmailSender()

{

Attachments = new List<Attachment>();

EmbeddedResources = new List<LinkedResource>();

Priority = MailPriority.Normal;

}

#endregion

#region Public Functions

/// <summary>

/// Sends an email

/// </summary>

/// <param name="Message">The body of the message</param>

public void SendMail(string Message)

{

Body = Message;

SendMail();

}

/// <summary>

/// Sends a piece of mail asynchronous

/// </summary>

/// <param name="Message">Message to be sent</param>

public void SendMailAsync(string Message)

{

Body = Message;

ThreadPool.QueueUserWorkItem(delegate { SendMail(); });

}

/// <summary>

/// Sends an email

/// </summary>

public void SendMail()

{

using (System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage())

{

char[] Splitter = { ',', ';' };

string[] AddressCollection = To.Split(Splitter);

for (int x = 0; x < AddressCollection.Length; ++x)

{

if(!string.IsNullOrEmpty(AddressCollection[x].Trim()))

message.To.Add(AddressCollection[x]);

}

if (!string.IsNullOrEmpty(CC))

{

AddressCollection = CC.Split(Splitter);

for (int x = 0; x < AddressCollection.Length; ++x)

{

if (!string.IsNullOrEmpty(AddressCollection[x].Trim()))

message.CC.Add(AddressCollection[x]);

}

}

if (!string.IsNullOrEmpty(Bcc))

{

AddressCollection = Bcc.Split(Splitter);

for (int x = 0; x < AddressCollection.Length; ++x)

{

if (!string.IsNullOrEmpty(AddressCollection[x].Trim()))

message.Bcc.Add(AddressCollection[x]);

}

}

message.Subject = Subject;

message.From = new System.Net.Mail.MailAddress((From));

AlternateView BodyView = AlternateView.CreateAlternateViewFromString(Body, null, MediaTypeNames.Text.Html);

foreach (LinkedResource Resource in EmbeddedResources)

{

BodyView.LinkedResources.Add(Resource);

}

message.AlternateViews.Add(BodyView);

//message.Body = Body;

message.Priority = Priority;

message.SubjectEncoding = System.Text.Encoding.GetEncoding("ISO-8859-1");

message.BodyEncoding = System.Text.Encoding.GetEncoding("ISO-8859-1");

message.IsBodyHtml = true;

foreach (Attachment TempAttachment in Attachments)

{

message.Attachments.Add(TempAttachment);

}

System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient(Server, Port);

if (!string.IsNullOrEmpty(UserName) && !string.IsNullOrEmpty(Password))

{

smtp.Credentials = new System.Net.NetworkCredential(UserName, Password);

}

if (UseSSL)

smtp.EnableSsl = true;

else

smtp.EnableSsl = false;

smtp.Send(message);

}

}

/// <summary>

/// Sends a piece of mail asynchronous

/// </summary>

public void SendMailAsync()

{

ThreadPool.QueueUserWorkItem(delegate { SendMail(); });

}

#endregion

#region Properties

/// <summary>

/// Any attachments that are included with this

/// message.

/// </summary>

public List<Attachment> Attachments { get; set; }

/// <summary>

/// Any attachment (usually images) that need to be embedded in the message

/// </summary>

public List<LinkedResource> EmbeddedResources { get; set; }

/// <summary>

/// The priority of this message

/// </summary>

public MailPriority Priority { get; set; }

/// <summary>

/// Server Location

/// </summary>

public string Server { get; set; }

/// <summary>

/// User Name for the server

/// </summary>

public string UserName { get; set; }

/// <summary>

/// Password for the server

/// </summary>

public string Password { get; set; }

/// <summary>

/// Port to send the information on

/// </summary>

public int Port { get; set; }

/// <summary>

/// Decides whether we are using STARTTLS (SSL) or not

/// </summary>

public bool UseSSL { get; set; }

/// <summary>

/// Carbon copy send (seperate email addresses with a comma)

/// </summary>

public string CC { get; set; }

/// <summary>

/// Blind carbon copy send (seperate email addresses with a comma)

/// </summary>

public string Bcc { get; set; }

#endregion

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C#教程学习
热门C#教程学习
编程开发子分类