.Net 2.0 中的发送邮件实现小解

记得原来在.Net 1.X中编写发送邮件的代码是使用操作系统的CDO组件中的CDO.Message来来实现的,因为这个里面可以实现SMTP服务器认证等一序列的发送邮件的详细功能,不过不管是什么错误都会提示是CDO.Message对象无法访问或其它的CDO.Message异常,而在.Net Framework 1.X的FCL(Framework Class Library)中提供的System.Web.Mail.SmtpMail类实现发送邮件的功能十分Simple,连SMTP服务器认证的功能都不提供,真的够晕。

不过到了.Net Framework 2.0中System.Web.Mail.SmtpMail的SDK说明的第一行已经就明确标明了红色的粗体字“注意:此类现在已过时。”,看来这个类确实是.Net Framework 1.X设计问题,可能也是过度类了。

在.Net Framework 2.0中取而代之的是System.Net.Mail命名空间下的类,其发送邮件的功能已经被设计得Very good了。我的做法喜欢先深入后浅出,首先让我们来看看在.Net 2.0中如何完全用代码来实现发送最简单的邮件(无需SMTP认证)。

None.gif string  mailServerName  =   " mail.powerise.com.cn " ;
None.gif
string  from  =   " pcmax@powerise.com.cn " ;
None.gif
string  to  =   " pcmax@etang.com " ;
None.gif
string  subject  =   " test " ;
None.gif
string  body  =   " hello " ;
None.gif
try
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif 
// MailMessage表明电子邮件
InBlock.gif
 using (MailMessage message = new MailMessage(from, to, subject, body))
ExpandedSubBlockStart.gifContractedSubBlock.gif 
dot.gif{
InBlock.gif  
//SmtpClient是发送邮件的主体,这个构造函数是告知SmtpClient发送邮件时使用哪个SMTP服务器
InBlock.gif
  System.Net.Mail.SmtpClient mailClient = new System.Net.Mail.SmtpClient(mailServerName);
InBlock.gif   mailClient.UseDefaultCredentials 
= true;
InBlock.gif    
// 最终的发送方法
InBlock.gif
                mailClient.Send(message);
ExpandedSubBlockEnd.gif }

InBlock.gif Loger.Write(
"Message sent.");
ExpandedBlockEnd.gif}

None.gif
catch  (Exception ex)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif Loger.Write(ex.Message);
ExpandedBlockEnd.gif}

这个代码一般是不能被实际运用的,因为现在的邮件服务器都需要做SMTP服务器认证,哈,说了一段废话。

现在马上再介绍一段使用SMTP服务器认证来发送邮件的代码:

None.gif string  mailServerName  =   " smtp.21cn.com " ;
None.gif
string  from  =   " amax@21cn.com " ;
None.gif
string  to  =   " amax@21cn.com " ;
None.gif
string  subject  =   " test " ;
None.gif
string  body  =   " hello " ;
None.gif
using  (MailMessage message  =   new  MailMessage(from, to, subject, body))
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif 
//SmtpClient是发送邮件的主体,这个构造函数是告知SmtpClient发送邮件时使用哪个SMTP服务器
InBlock.gif
 System.Net.Mail.SmtpClient mailClient = new System.Net.Mail.SmtpClient(mailServerName);
InBlock.gif 
//构建一个认证实例
InBlock.gif
 System.Net.NetworkCredential nc = new System.Net.NetworkCredential("amax@21cn.com","******");
InBlock.gif 
//将认证实例赋予mailClient
InBlock.gif
 mailClient.Credentials = nc;
InBlock.gif 
//千万不要再画蛇添足在“mailClient.Credentials = nc;”语句下再对mailclient.UseDefaultCredentials赋值了,不管是false还是true,都将导致程序运行出错
InBlock.gif
InBlock.gif 
// 最终的发送方法
InBlock.gif
 mailClient.Send(message);
ExpandedBlockEnd.gif}

目前大家看到的都是通过Code来进行邮件发送的,而在Asp.Net2.0中Framework考虑更多的是配置式,也就是通过config方式来进行应用程序的控制,而不是把绝大多数的参数都硬编码,查阅SDK后可以看到有个mailSettings的配置节,在SDK用红色文字显注的表示了“此属性在 .NET Framework 2.0 版中是新增的” ,这个配置节属于<system.net>节下的。

接下来我们把上面的代码用一些配置信息来取得,马上会得知你的Code是多么简洁。
config:

None.gif < mailSettings >
None.gif  
< smtp  from ="amax@21cn.com" >
None.gif    
< network  host ="mail.21cn.com"  password ="*********"  port ="25"  userName ="amax"  defaultCredentials ="false" />
None.gif  
</ smtp >
None.gif
</ mailSettings >

code:

None.gif string  subject  =   " test " ;
None.gif
string  body  =   " hello " ;
None.gifSmtpSection smtpSec 
=  (SmtpSection)ConfigurationManager.GetSection( " system.net/mailSettings/smtp " );
None.gif
using  (MailMessage message  =   new  MailMessage(smtpSec.From,  " amax@21cn.com " , subject, body))
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    System.Net.Mail.SmtpClient mailClient 
= new System.Net.Mail.SmtpClient();
InBlock.gif    mailClient.Send(message);
ExpandedBlockEnd.gif}

哈,是不是很有成就感。其实只要多翻阅SDK还会获得很多的关于发送邮件的技巧,今天就写到这,本来这篇文章在去年6月份就要完成的,一直因为公司项目太紧张,每天人搞得焦头烂额的,所以今天才继续把它写完,希望原来走过在此方面走过弯路朋友见谅。

转载于:https://www.cnblogs.com/pcmax/archive/2007/08/06/845430.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值