从ASP.NET中发送电邮通知(转)!感觉可以,与大家分享!

来源:互联网 发布:留学申请 知乎 编辑:程序博客网 时间:2024/06/07 07:06


 
ASP.NET改变了这一切,Web开发者获得了对.NET框架库的完全访问。我们终于有机会能做得更好。本文探讨了ASP.NET内建的电子邮件支持,并介绍了一个实例:就网站的404错误向自己发送电邮通知。

SMTP被最大程度地简化
到底有多简单呢?如果服务器恰好正在运行一个SMTP服务,那么为了程序化地发送电子邮件,只需添加一行代码就够了。请调用System.Web.Mail.SmtpMail的Send方法,并向它传递4个字符串参数:发件人地址、收件人地址、主题和邮件正文。如下所示:

 
  System.Web.Mail.SmtpMail.Send(
 “from@from.com”,
  ”to@to.com”,
  ”My Subject Line”,
  ”My Message Body”);

即使服务器上没有运行SMTP服务,操作也十分简单:只需在Send调用之前添加一行代码,将System.Web.Mail.SmtpMail.Send的静态SmtpServer属性设为你能使用的一个SMTP服务器,如下所示:

System.Web.Mail.SmtpMail.SmtpServer = “mail.domain.com”;

再调用如前例所示的Send方法即可。


好得令人不敢相信?

SmtpMail类有两个重大的缺点:

SMTP服务器如需身份验证,就不可用它发送电邮。 
SmtpMail不是.NET原生类;它只是一个封装器,封装了基于COM的“协作数据对象”(CDO)API。 
最后一个问题尤其令人失望;微软公司更好的做法是用他们自己的.NET套接字类来生成一个.NET SMTP类,就像Sun为Java开发者提供的那个与平台无关的javax.mail包。但无论如何,这两个限制对大多数人来说都不是问题,因为大多数SMTP服务器不需要身份验证。而且你通常运行的是一个安装好CDO的Windows服务器。

实际使用SmtpMail:404错误通知

 
网站所有者要尽量保证不会因为自己的原因而造成404 Page Not Found错误,比如用户将某个页加入收藏夹之后,却因为你移动了网页而造成他们找不到原来的页面。我认为这是一种很严重的错误,希望尽快知道它们,而不必每次都阅览服务器日志来查找错误。知道得越早,修正得越快。


当然,并不是所有404错误都是由自己造成的;也可能是用户敲错了URL,或者是他们有意猜测某个网址。但通过这种404错误,我们可知道用户的操作习惯,以及他们的一些希望,所以仍有必要对其进行跟踪。

404Handler.aspx页

我写了一个示范404Handler.aspx页(参见清单A),它能在载入时发送一个电邮通知,其中包括有误的URL。首先,我检查客户端浏览器的用户代理;如果是因为某个spider或者crawler在闲逛而引起404错误,就不必发送电邮通知。所以,我在Request.UserAgen返回的字符串中查找是否出现spider或crawler字样。如果是,就认为是一个spider在捣鬼,函数退出,不发送电子邮件。


如果代理不是spider/crawler,就将整个Request.RawUrl字符串包括到邮件正文中,并从一个虚拟电邮地址(404@mysite.com)向admin@mysite.com发送一封电子邮件。另外还要包括Request.UrlReferrer,以便了解有误的链接是否来源于我的网站中的另一个网页。

捕捉错误

至于具体如何捕捉404错误,要取决于你对Web服务器的控制有多大。如果能完全访问Web服务器,就可使用Internet服务器管理器来查看网站属性,并更改“自定义错误页”选项,指向负责生成警告的.aspx页。

另一方面,如果你的网站是托管的,那么也许能访问一个HTML文档(通常名为404.htm)。请对其进行自定义,防止访问者看到标准的、难看的404错误页。在这个例子中,请在其中添加一些客户端JavaScript代码,如清单B所示。

代码会重定向到404Handler.aspx页,并将原来请求的URL和引用URL作为查询字符串的一部分。之所以要把它们作为重定向URL的一部分,是因为现在的Request.UrlReferrer将变成404.htm,而这是没有多大用处的。由于404Handler.aspx将它的整个URL都放到电邮通知中,所以我检查一下查询字符串,就能知道原来的引用URL是什么。


相对路径的问题

如果将404错误直接发送给404Handler.aspx文件,注意虚拟路径将是在有误的URL中请求的路径。在.aspx页的HTML部分中,这很容易破坏对样式表和图像等元素的相对引用。最终的404页可能散布着难看的、中断的图像占位符。


所以,更好的做法(虽然较慢,而且不直观)是像清单B的客户端JavaScript例子那样使用一种重定向技术。通过客户端代码来重定向浏览器(如下所示),能彻底避免相对路径的问题。

 document.location.replace(“/404handler.aspx”);
本文介绍的并不是跟踪和提示404错误的最高级的技术,但它足够快、足够简单,让你能在第一时间修正错误。当然,SmtpMail并非只能用于处理404错误;在其他许多情况下,你和你的管理员都需要尽快获得电邮通知。由于只需一、两行代码就可实现,所以极大简化了你的编程工作。