<2>c#调用数据库邮件组件进行邮件的发送
还记得当年刚毕业的时候,对于发送邮件这块功能当时是异常的痴迷,各种的研究和各种的调试。
后来的终归在废了九牛二虎之力之后,终于在一个午夜梦回之时看到了我梦寐以求的测试邮件发送通知,想想一个字描述:草!
大体我记得需要引用以下几个命名空间:
using System.Net; using System.Net.Mail;
然后利用C#提供的SmtpClient类进行组装成邮件实体,而后一个Send()方法,这其中的痛苦点在于各种编码规范等。
我相信现在也有很多程序猿依然再采用着这种方式。
今天提供另外一种灵活的实现方式,利用SQL Server数据库的邮件组件进行邮件的发送。
关于上面第一个步骤提供的邮件组件的调用,其实在SQL Server中是提供系统自带的存储过程进行实现的。方法如下:

该存储过程提供了发送邮件的的各种参数,完全满足发送邮件的各种需求,比如:主题、内容、附件、CC、秘密CC....等等吧
调用该存储过程的方法如下:
- --存储过程调用发邮件
- EXEC msdb.dbo.sp_send_dbmail
- @profile_name = 'testMail',
- @recipients = '787449667@qq.com',
- @body = '这是测试邮件',
- @subject = '我发的',
- @file_attachments='C:\temp\3-26-2015-16-20-21.png'
上面一个简单的方法执行既可以实现,邮件的发送。

然后,你需要的就是c#调用该存储过程了。
关于写C#代码通过Ado.net调用存储过程的过程这里就不赘述了,我相信这是入门级别的小白也能搞定的事情了。
而后,这里捎带分析一下邮件组件的原理和性能问题。我相信这是很多人关心的,其实SQL Server的邮件发送时通过一个底层的JOB轮询执行的,所以根本不用担心其执行顺序和性能问题。
并且SQL Server为此还提供了几个系统的视图来查看历史运行状态和当前邮件的队列状态:
- --邮件内容
- SELECT * FROM msdb.dbo.sysmail_allitems

- --邮件发送日志
- SELECT * FROM msdb.dbo.sysmail_event_log

并且SQL Server提供了邮件重新发送的功能以及其它默认参数,具体设置参照此画面:

至此,已经完成了利用C#进行发送邮件的功能。
我相信基本上用C#就会搭配微软自己的SQL Server数据库,而使用它之后就可以少量的代码实现邮件发送的功能。