陈 晨

从1+1开始,从abc学起
posts - 24, comments - 61, trackbacks - 6, articles - 1

ASP.NET 2.0中发送电子邮件

Posted on 2008-06-05 00:03 陈晨 阅读(1326) 评论(9)  编辑 收藏 网摘 所属分类: ASP.NET
      ASP.NET 2.0 中发送电子邮件变得非常简单。发送电子邮件的类库主要在命名空间System.Net.Mail中,在这个命名空间中有两个核心类是:
      · MailMessage:描述一个电子邮件消息;它拥有From,To,Subject,Body等属性;
      · SmtpClient:把一个指定的MailMessage实例发送到一个指定的SMTP服务器。

      发送电子邮件的一般步骤是:
      1.创建一个MailMessage对象;
      2.赋给它的From,To,Subject,Body等属性;
      3.创建一个SmtpClient类实例;
      4.指定关于使用该SMTP服务器的细节(如果它们没有在Web.config中指定);
      5.经由SmtpClient对象的Send方法发送该MailMessage。
      
      下面的代码演示了发送电子邮件的过程:
string mailServerName = "smtp.126.com";  //发送邮件的SMTP服务器
string mailFrom = "sender0624@126.com";   //发件人邮箱(用126的邮件服务器,就必须用126邮箱的用户名)
string mailTo = "supremezone@126.com";   //收件人邮箱
string subject = "用代码方式发送邮件";//邮件主题
string body = "这里是邮件正文了";  //邮件正文

using (MailMessage message = new MailMessage(mailFrom, mailTo, subject, body))
{
    
//SmtpClient是发送邮件的主体,这个构造函数是告知SmtpClient发送邮件时使用哪个SMTP服务器
    SmtpClient mailClient = new SmtpClient(mailServerName);
    
//将认证实例赋予mailClient,也就是访问SMTP服务器的用户名和密码
    mailClient.Credentials = new NetworkCredential("sender0624""111111");
    
//最终的发送方法
    mailClient.Send(message);
}

       上述方法是通过Code方式发送邮件的,而在Asp.Net 2.0中Framework考虑更多的是配置式,也就是通过config方式来进行应用程序的控制,减少程序参数硬编码,这个配置节属于<system.net>节下的。
        首先在Web.config文件中增加如下配置节:
 <system.net>
    
<!--如果是第三方smtp服务器,需要指定userName 和 password,并根据host指定发件人邮件地址from
        测试发现from值必须是userName值加上指定的smpt服务器才行,而且是必须指定的
        如果是本机smtp服务器,只需指定defaultCredentials="true"即可
-->
    
<mailSettings>
      
<smtp deliveryMethod="Network" from ="sender0624@126.com" >
        
<network host="smtp.126.com" port="25" userName="sender0624" password="111111/>
      
</smtp>
    
</mailSettings>
  
</system.net>

        接下来是程序代码,你会发现配置方式较Code方式代码是多么简洁,而且避免了硬编码,Smtp信息是从配置文件中读取的。
using (MailMessage message = new MailMessage())
{
    message.To.Add(
new MailAddress("supremezone@126.com")); //收件人邮箱
    message.Subject = "通过配置文件设置发送邮件";//邮件主题
    message.Body = "这里是邮件正文了";  //邮件正文

    SmtpClient mailClient 
= new SmtpClient();
    mailClient.Send(message);
}

        相比Code方式,我们发现配置方式代码中省去了发件人邮箱,SMTP服务器和SMTP服务器认证的Credentials,代码变得相当简洁,更为重要的是这些信息可以在Web.config文件中配置,这就大大增加了程序的灵活性,这是推荐采用的方式。需要说明的一点,示例中的邮箱用户名和密码都是真实的,理论上运行该示例程序是可以正常发送邮件的,但发送邮件时程序会抛出异常“邮箱不可用。 服务器响应为: Óû§±»Ëø¶¨ ”,但如果Credentials认证信息换成我另一个126邮箱,却能正常发送邮件了,一直没能找到原因所在,将对SmtpClient发送邮件的稳定性做进一步的研究,也希望能得到大家的指导。

        参考资料:ASP.NET 2.0中发送电子邮件剖析之一.Net 2.0 中的发送邮件实现小解

        源代码下载地址: 点击下载完整示例程序 (示例路径:/NetFromwork/SendMail.aspx

Tag标签: smtp

Feedback

#1楼   回复  引用  查看    

2008-06-05 08:47 by ★金★      
这种方法太简单了,实际使用中你会发现很多问题。
比如:smtp服务器正忙,超时邮件发不出去,smtp服务器无法连接,也发不出去,等等很多,这些未发送的邮件不会再次发送。

#2楼   回复  引用    

2008-06-05 09:13 by Sprite[未注册用户]
--引用--------------------------------------------------
★金★: 这种方法太简单了,实际使用中你会发现很多问题。
比如:smtp服务器正忙,超时邮件发不出去,smtp服务器无法连接,也发不出去,等等很多,这些未发送的邮件不会再次发送。
--------------------------------------------------------
不然怎么样才比较好呢?

#3楼   回复  引用  查看    

2008-06-05 10:00 by 郑州-袁金辉      
有什么更加可靠的发送方法吗?
@★金★

#4楼   回复  引用  查看    

2008-06-05 14:17 by West      
如果服务器端需要身份验证呢?

#5楼[楼主]   回复  引用  查看    

2008-06-10 17:39 by 陈晨      
@West
--引用--------------------------------------------------
West: 如果服务器端需要身份验证呢?
--------------------------------------------------------
第一种方式:
mailClient.Credentials = new NetworkCredential("sender0624", "111111");

第二种方式:
<network host="smtp.126.com" port="25" userName="sender0624" password="111111/>

这两种方式都提供了用户名和密码,请求SMTP服务器进行身份验证

#6楼   回复  引用  查看    

2008-06-26 00:44 by 笑疯^_^      
用Jmail就很好的

#7楼[楼主]   回复  引用  查看    

2008-08-06 22:03 by 陈晨      
--引用--------------------------------------------------
笑疯: 用Jmail就很好的
--------------------------------------------------------
听说JMail也不是很稳定,也存在发布出去的时候,不过自己没用过

#8楼[楼主]   回复  引用  查看    

2008-08-06 22:09 by 陈晨      
新注册的126和163邮箱帐号发送邮件时返回错误邮箱不可用。 服务器响应为: Óû§±»Ëø¶¨ ”,是因为网易对新用户做了限制,不能使用客户端发送邮件。不仅使用.NET发送邮件的类库不能发送,使用outlook等客户端工具也是不能发送的。

#9楼   回复  引用    

2008-09-24 11:19 by smm[未注册用户]
能不能给我发一份更详细的呀?????????急用,这个我用了有点错,自己又找不出来



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1213984




相关文章:

相关链接: