当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 如何在ASP.NET中使用SmtpMail发送邮件

ASP.NET
ASP.NET开发:简化应用程序的开发支持Web标准
asp.net XMLHttpRequest实现用户注册前的验证
asp.net 页面间传值方法小结
asp.net url重写浅谈
asp.net 验证码生成和刷新及验证
C#精髓 GridView72大绝技 学习gridview的朋友必看
实例说明asp.net中的简单角色权限控制
asp.net网站开发包wq.dll打包下载
js与ASP.NET 中文乱码问题
asp.net checkbox 动态绑定id GridView删除提示
asp.net TextBox回车触发事件 图片在img显示
asp.net 脏字典过滤问题 用正则表达式来过滤脏数据
asp.NET 脏字过滤算法
asp.NET 脏字过滤算法 修改版
asp.net sql 数据库处理函数命令
asp.net Javascript 的几种写法与提示
ASP.NET MVC学习笔记
asp.net 中国身份证号码验证代码 非正则
Asp.net中使用Sqlite数据库的方法
asp.net 中文字符串提交乱码的解决方法

如何在ASP.NET中使用SmtpMail发送邮件


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 253 ::
收藏到网摘: n/a

在ASP中,就可以通过调用CDONTS组件发送简单邮件,在ASP.NET中,自然也可以。不同的是,.Net Framework中,将这一组件封装到了System.Web.Mail命名空间中。

一个典型的邮件发送程序如下:

<%@ Import Namespace="System.Web.Mail" %>

<script runat="server">

MailMessage mail=new MailMessage();

 mail.From="[email protected]";
 
 mail.To="[email protected]";
 
 mail.BodyFormat=MailFormat.Text;
 
 mail.Body="a test smtp mail.";
 
 mail.Subject="r u ok?";
 
 SmtpMail.SmtpServer="localhost";
 
 SmtpMail.Send(mail);
 
</script>
 
通常情况下,系统调用IIS自带的默认SMTP虚拟服务器就可以实现邮件的发送。但是也经常会遇到这样的错误提示:

The server rejected one or more recipient addresses. The server response was: 550 5.7.1 Unable to relay for [email protected]

产生这个错误的原因除了地址错误的可能外,还有一个重要原因。如上文提到的,IIS并不带有真正的邮件功能,只是借用一个“SMTP虚拟服务器”实现邮件的转发。在MSDN中,有如下提示:

如果本地 SMTP 服务器(包括在 Windows 2000 和 Windows Server 2003 中)位于阻塞任何直接 SMTP 通信量(通过端口 25)的防火墙之后,则需要查找网络上是否有可用的智能主机能用来中转发往 Internet 的 SMTP 消息。
智能主机是一个 SMTP 服务器,它能够中转从内部 SMTP 服务器直接发送到 Internet 的外出电子邮件。智能主机应能同时连接到内部网络和 Internet,以用作电子邮件网关。

打开默认SMTP虚拟服务器-属性-访问-中继限制,可以看到,这种转发或者中继功能受到了限制。在限制列表中,添加需要使用此服务器的主机的IP地址,就可以解决上文提到的问题。

如果不使用IIS自带的SMTP虚拟服务器而使用其他真正的邮件服务器,如IMail,Exchange等,常常遇到服务器需要寄送者身份验证的问题(ESMTP)。在使用需要验证寄送者身份的服务器时,会出现错误:

The server rejected one or more recipient addresses. The server response was: 550 not local host ckocoo.com, not a gateway

以前在ASP中,遇到这种问题没有什么解决的可能,只能直接使用CDO组件(CDONTS的父级组件):

conf.Fields[CdoConfiguration.cdoSMTPAuthenticate].Value=CdoProtocolsAuthentication.cdoBasic;conf.Fields[CdoConfiguration.cdoSendUserName].Value="brookes";conf.Fields[CdoConfiguration.cdoSendPassword].Value="XXXXXXX";

在.Net Framework 1.1中,显然对这一需求有了考虑,在MailMessage组件中增加了Fields集合易增加ESMTP邮件服务器中的寄送者身份验证的问题。不过,这一方法仅适用于.Net Framework 1.1,不适用于.Net Framework 1.0版本。带有寄送者身份验证的邮件发送程序如下:

<%@ Import Namespace="System.Web.Mail" %><script runat="server">MailMessage mail=new MailMessage();mail.From="[email protected]";mail.To="[email protected]";mail.BodyFormat=MailFormat.Text;mail.Body="a test smtp mail.";mail.Subject="r u

ok?";mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1"); //basic authentication mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "brookes"); //set your username here mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "walkor"); //set your password here SmtpMail.SmtpServer="lsg.moon.net";SmtpMail.Send(mail);</script>

有了这种方法,终于可以不必再借助于Jmail、EasyMail等第三方组件,而只简单使用SmtpMai就可以完成邮件的发送了!