在前面的一些文章中,有介绍过DotNet内置SMTP类的邮件发送功能,附件、嵌入图片的模式都有介绍,本文继续介绍Lumisoft.NET这个非常优秀的开源组件,用该组件来设计开发邮件工具,将变得更加方便,功能更加强大。网上很多文章基本介绍如何使用该组件来收取邮件较多,较少介绍使用该组件做邮件发送功能的。本文主要探寻使用该组件实现邮件的发送功能,邮件发送有两种方式,一种是不用发件人即可发送邮件,一种是使用发件人账户密码和SMTP服务器来实现邮件发送的,本文分别对这两种方式进行介绍。
组件下载地址:
组件论坛地址:?g=forum
秉承一贯的做法,先贴出相关的实现图形,感官认识下,在进入详细的介绍说明,以求达到最好的理解深度。
1、 首先是发件人的设置,可以从文本文件的导出,以及新建等操作,以方便用户操作。
2、 内容也支持导入导出,并且保存到数据库,方便进行记录及操作等,另外可以对内容进行随机混淆,混淆的内容在HTML邮件中式隐藏的,方便糊弄一下服务器的识别。
3、 邮件发送可以选择两种方式,下面将分别介绍这两种方式的实现,一种采用该控件封装非常好的邮件直投技术,不需要SMTP账号发送的;一种是普通的SMTP发送方式。当然我们还可以设置更多的参数,例如邮件尾部信息、HTML内容提示、 以及一些发送期间自动拨号的设置操作等。
4、 邮件直投技术,通过模拟账户来附加用户的邮件地址(或者可以成为伪装)。其中我填写了一些常用的SMTP服务器的域名,方便在其中构造合乎要求的邮件格式,还可以设置邮件回执通知,如下图所示。
5、 如果是采用普通发送方式,那么就需要制定用户的账号密码等信息,发送的时候,自动从启动获取发件人信息进行批量发送操作。
6、 最后体验一下少量邮件的发送效果,发送采用多线程发送,多线程采用比较有名的SmartThreadPool组件,并且发送过程总详细记录其中的日志,供参考。
介绍完毕相关的功能效果图,下面我们来分析下主要功能实现的代码:
复制代码 代码如下:
private TimerHelper timer = null;
private void btnSend_Click(object sender, EventArgs e)
{
//重置计数变量
failedItems = 0;
successItems = 0;
workItemsCompleted = 0;
workItemsGenerated = 0;
Portal.gc.FailedCount = 0;//重置失败次数
STPStartInfo stpStartInfo = new STPStartInfo();
stpStartInfo.IdleTimeout = 10;
stpStartInfo.MaxWorkerThreads = 100;
stpStartInfo.MinWorkerThreads = 0;
//stpStartInfo.StartSuspended = true;
_smartThreadPool = new SmartThreadPool(stpStartInfo);
_workItemsGroup = _smartThreadPool;
workItemsProducerThread = new Thread(new ThreadStart(this.WorkItemsProducer));
workItemsProducerThread.IsBackground = true;
workItemsProducerThread.Start();
RefreshStatusCount();
int intervalRedial = SystemConfig.Default.IntervalRedial * 1000 * 60;
if (intervalRedial > 0)
{
if (timer != null)
{
timer.Stop();
timer.Dispose();
}
timer = new TimerHelper(intervalRedial,false);
timer.Execute += new TimerHelper.TimerExecution(timer_Execute);
timer.Start();
}
}