如果你有一個需要偶爾發送郵件的Asp.Net的網站,可能會有代碼長的和下面的很像:
復制代碼 代碼如下:可能它曾經工作,但是當你切換到或初步部署到新的Windows 2008 服務器時,你會遇到錯誤提示信息"Cannot get IIS Pickup Directory!"
現在,我經常稱呼自己為世界上最厲害的系統管理員。這不是我研究的方向。我並不非常擅長,但是有時在實際工作中我不得不面對和解決這些問題以獲取報酬。
1) SMTP服務是否安裝?
你的Web服務器或許還沒有安裝SMTP服務,所以進入服務管理中確定SMTP服務在功能列表中。如果不在,就需要你添加上去。
2) SMTP是否已配置?
僅僅確定SMTP服務已經安裝是不夠的。首先,當你服務器啟動時(我曾經遇到些客戶端軟件安裝前可以發送郵件,但是之後就不可以了,他們重啟了服務器,而Mail服務沒啟動,就這麼簡單),確保你的SMTP服務也跟著自動啟動。進入服務,確保SMTP服務在那裡,並且已經啟動,啟動類型也為自動。
然後,你應該配置SMTP服務——說句實話,我對此知道的不多,所以我就不詳細解釋了,但是你需要知道SMTP仍然是IIS6.0的一部分,所以你可以在IIS6.0的管理界面找到它。一個快速突破點,因為它可能不符合了一些接收郵件服務器需要一個完整的合格域名的要求,而你的服務器可能只有一個被嚴格被限制使用的簡單域名,比如像“Server15”之類的,所以在SMTP屬性中,Delivery標簽下 ,點擊添加按鈕,給服務器一個真正的完整的滿足要求的域名。
3) 防火牆是打開的嗎?
你的一些操作有可能與防火牆沖突,所以現在是個好時機去排除SMTP安裝故障。你可以通過Telnet本機通過端口25,手動給自己發個簡單的郵件。下面一個例子可以照著做。
復制代碼 代碼如下:
telnet localhost 25
HELO somehost.com
MAIL FROM: [email protected]
RCPT TO: [email protected]
DATA
Subject: the subject of the mail
Blah blah blah message body
點擊回車鍵,過會進入發件箱 如果你不能連接,或者郵件不能送達,這裡還有一些其他問題需要你解決,因為防火牆是不會影響拾取目錄的獲取。
4) IIS是否有權限獲取元數據(拾取目錄信息)
這裡我們將會遇到實際的出錯原因--你在網站跑的程序也許沒有權限獲取保存著拾取目錄名的IIS 元數據(metabase),這通常就是引起錯誤的原因。
你需要下載IIS 6.0 資源包。裡面有你需要用到的“metaacl.vbs”腳本而我不需要的。[點我下載]
下載並安裝,然後運行Metabase Explorer(你可以搜索它,我的在“Program Files (x86)\IIS Resources\Metabase Explorer”目錄下)。 你應該在你的IIS進程為SmtpSvc服務添加讀權限(我為IIS_IUSRS組添加了權限,在配置中查看為你工作的是否有權限)。
5) IIS是否有權限寫入拾取目錄
下面這步只是補充,因為你在下次使用網站來發送郵件可能會遇到權限錯誤。這時,你需要為你的IIS用戶添加寫入拾取目錄的權限(對我而言,我為“IIS_IUSES”添加了拾取目錄“c:\inetpub\mailroot”的寫入權限)。
這樣不管怎樣,使它為我工作了,但是對任意的服務器來說,可能因為我點擊了某些地方對程序有著關鍵作用的一些有魔力的多選框,所以如果你仍有問題,或者知道這些問題的答案,請在評論中提出,正如我所提到的,我可能修改了一些自己沒注意到的地方,導致可以發送郵件。如有不足,我將及時改正。