?? 從asp.net中發送電郵通知.txt
字號:
從ASP.NET中發送電郵通知(轉)!感覺可以,與大家分享!
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錯誤;在其他許多情況下,你和你的管理員都需要盡快獲得電郵通知。由于只需一、兩行代碼就可實現,所以極大簡化了你的編程工作。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -