`
weizhai12
  • 浏览: 149412 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

分享一个异步发送邮件的类

 
阅读更多

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

/// <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#实现异步发送邮件的方法。分享给大家供大家参考。具体如下: 下面的代码可以实现异步发送邮件,等邮件发送出去后会自动调用回调函数,这样在发送邮件时就不会卡住程序不动了 MailMessage m = new ...

    Android发送邮件demo

    对于后台发送邮件,可能包含一个SMTP配置类、一个邮件发送类,以及异步处理逻辑。而对于调用第三方邮件客户端,可能是一个简单的Intent创建和启动流程。 在实际开发中,我们还需要考虑以下几点: - **用户隐私**:...

    IOS 发送邮件 DEMO

    这是苹果提供的一个类,允许用户在不离开应用的情况下编写和发送邮件。`MFMailComposeViewController`提供了预设的用户界面,用户可以填写收件人、主题和邮件正文,还能添加图片、文档等附件。 **第一种方法:使用...

    C# DataTable生成excel并将excel添加附件发送邮件

    `DataTable`是.NET框架中的一个类,它代表了一个可以存储和操作数据的表格结构,类似于数据库中的表。你可以通过执行SQL查询或者使用ADO.NET的数据适配器从数据库中填充一个`DataTable`。 生成Excel文件的过程通常...

    基于C#开发的发送邮件程序

    - **性能优化**:批量发送邮件时,可以使用异步发送以提高效率。 - **安全性**:避免明文存储密码,可采用安全的凭证存储方式,如Windows凭据保管库。 - **邮件格式**:考虑支持多种邮件格式,如纯文本和HTML,以...

    C#使用系统方法发送异步邮件完整实例

    由于使用的是C#的邮件类库,而C#本身已经提供了异步发送的功能即只需要将Send方法更改为SendAsync即可,更改方法名并不难但发送后再写入日志就有点难了 因为项目中发送邮件是单独的组件,所以我不可能在发送邮件类库中...

    C# .net winform mail 发送邮件 源码

    - 异步发送邮件,避免阻塞用户界面。 - 邮件预览功能,允许用户在发送前查看邮件格式。 - 支持HTML邮件,让邮件内容更丰富。 - 添加SMTP服务器配置选项,方便用户切换不同的邮件服务商。 - 实现邮件模板,提高邮件...

    android 下gmail邮件包括附件发送和接收

    1. 创建邮件对象:首先,我们需要创建一个`Message`对象,这将是邮件的核心。`Message`对象可以通过`Session`的`createMessage()`方法获取,并且需要设置发件人、收件人、主题和正文。 2. 设置邮件属性:使用`...

    多线程发邮件MailThreadCallble学习资料分享c

    在这个"多线程发邮件MailThreadCallble学习资料分享c"的主题中,我们主要探讨的是如何利用Java的多线程技术来实现高效的邮件发送功能。下面将详细讲解相关知识点。 1. **线程基础**:在Java中,线程是程序执行的...

    C#邮件接收案例源码(最低分分享)

    这个案例源码提供了一个基础的邮件接收解决方案,可以帮助开发者理解和实现这一功能。本文将深入解析这个C#邮件接收案例中的关键知识点。 1. **POP3协议**:此案例中使用的邮件接收协议很可能是POP3(Post Office ...

    C#邮件接收案例源码--最低分分享

    本案例源码的分享提供了一个基础的C#邮件接收解决方案,可以帮助开发者理解如何使用.NET框架来实现这样的功能。以下是对这个主题的详细阐述: 1. **SMTP(Simple Mail Transfer Protocol)与POP3(Post Office ...

    SendMail 2000 邮件l群发源码.rar_Sendmail_send mail_群发

    另一个文件"SendEmailGroup"很可能就是实际的邮件群发源代码文件,其中包含了实现邮件发送功能的类、函数和逻辑。 在分析和学习这个源码时,可以关注以下几个关键知识点: 1. **SMTP协议**:了解SMTP的工作原理,...

    发送邮件

    在文件名“sendMail”中,我们可以推测这是一个与邮件发送相关的程序或脚本。可能是封装了邮件发送逻辑的函数库,也可能是独立的邮件发送脚本。 以下是一些可能涉及的知识点: 1. **SMTP协议**:理解SMTP的工作...

    C#通用邮件发送类分享

    发送邮件时,首先创建一个MailMessage对象,设置发件人、收件人、主题和邮件正文等信息,然后将MailMessage对象传递给SmtpClient的Send方法。 此外,考虑到POP3服务器在检查用户名和密码时可能会有延迟,代码使用了...

    Android邮件客户端Demo

    本项目"Android邮件客户端Demo"提供了一个全面的解决方案,采用JavaMail框架来实现这一功能。JavaMail是Java编程语言中的一个开源库,用于处理邮件相关的API,包括SMTP、POP3和IMAP等协议。 1. **JavaMail框架**:...

    PHP使用gearman进行异步的邮件或短信发送操作详解

    本文实例讲述了PHP使用gearman进行异步的邮件或短信发送操作。分享给大家供大家参考,具体如下: 一、准备工作 1、为了防止,处理业务途中出现的宕机,请配置好gearman的持久化方式。 2、使用gearmanManager来管理...

    内部简易邮件收发功能java实现

    接下来,我们创建一个邮件服务类,该类包含发送和接收邮件的方法。发送邮件的过程涉及以下步骤: 1. 创建`Properties`对象,设置SMTP服务器的属性,如主机名、端口号、认证方式等。 2. 使用`Session`对象初始化邮件...

    邮件代码整理

    结合“邮件和httpClient执行工具类”这个文件名,我们可以推测博客作者可能分享了一个整合了这两部分功能的工具类,这个工具类可能包含了一些静态方法,用于方便地发送邮件和执行HTTP请求。这样的工具类在实际开发中...

    电信设备-基于即时通讯的邮件分享方法、装置及系统.zip

    《基于即时通讯的邮件分享方法、装置及系统》这一主题主要涵盖了现代通信技术中的一个重要领域——将即时通讯(Instant Messaging, IM)与电子邮件(Email)服务相结合,以提高信息分享的效率和便捷性。在这一技术中...

    基于c#开发的邮件群发系统源码

    在C#中,类名通常以大写字母开头,所以这个命名可能代表"MailGroupSends"是一个类,负责组织和执行邮件的批量发送操作。 【详细知识点】 1. **C#编程**:C#是一种强类型、面向对象的语言,它的语法简洁明了,支持...

Global site tag (gtag.js) - Google Analytics