asp.net無法獲取iis目錄的問題解決方法
如果你有一個需要偶爾發(fā)送郵件的Asp.Net的網(wǎng)站,可能會有代碼長的和下面的很像:
//這是簡寫,并非實際項目代碼
public void Send(string from, string to, string subject, string body)
{
var msgMail = new MailMessage(from, to, subject, body);
msgMail.IsBodyHtml = true;
var server = new SmtpClient("localhost");
server.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;
server.UseDefaultCredentials = true;
server.Send(msgMail);
}
可能它曾經(jīng)工作,但是當(dāng)你切換到或初步部署到新的Windows 2008 服務(wù)器時,你會遇到錯誤提示信息"Cannot get IIS Pickup Directory!"
現(xiàn)在,我經(jīng)常稱呼自己為世界上最厲害的系統(tǒng)管理員。這不是我研究的方向。我并不非常擅長,但是有時在實際工作中我不得不面對和解決這些問題以獲取報酬。
1) SMTP服務(wù)是否安裝?
你的Web服務(wù)器或許還沒有安裝SMTP服務(wù),所以進入服務(wù)管理中確定SMTP服務(wù)在功能列表中。如果不在,就需要你添加上去。
2) SMTP是否已配置?
僅僅確定SMTP服務(wù)已經(jīng)安裝是不夠的。首先,當(dāng)你服務(wù)器啟動時(我曾經(jīng)遇到些客戶端軟件安裝前可以發(fā)送郵件,但是之后就不可以了,他們重啟了服務(wù)器,而Mail服務(wù)沒啟動,就這么簡單),確保你的SMTP服務(wù)也跟著自動啟動。進入服務(wù),確保SMTP服務(wù)在那里,并且已經(jīng)啟動,啟動類型也為自動。
然后,你應(yīng)該配置SMTP服務(wù)——說句實話,我對此知道的不多,所以我就不詳細(xì)解釋了,但是你需要知道SMTP仍然是IIS6.0的一部分,所以你可以在IIS6.0的管理界面找到它。一個快速突破點,因為它可能不符合了一些接收郵件服務(wù)器需要一個完整的合格域名的要求,而你的服務(wù)器可能只有一個被嚴(yán)格被限制使用的簡單域名,比如像“Server15”之類的,所以在SMTP屬性中,Delivery標(biāo)簽下 ,點擊添加按鈕,給服務(wù)器一個真正的完整的滿足要求的域名。
3) 防火墻是打開的嗎?
你的一些操作有可能與防火墻沖突,所以現(xiàn)在是個好時機去排除SMTP安裝故障。你可以通過Telnet本機通過端口25,手動給自己發(fā)個簡單的郵件。下面一個例子可以照著做。
telnet localhost 25
HELO somehost.com
MAIL FROM: yourname@somedomain.com
RCPT TO: the_to_address@somedomain.com
DATA
Subject: the subject of the mail
Blah blah blah message body
點擊回車鍵,過會進入發(fā)件箱 如果你不能連接,或者郵件不能送達,這里還有一些其他問題需要你解決,因為防火墻是不會影響拾取目錄的獲取。
4) IIS是否有權(quán)限獲取元數(shù)據(jù)(拾取目錄信息)
這里我們將會遇到實際的出錯原因--你在網(wǎng)站跑的程序也許沒有權(quán)限獲取保存著拾取目錄名的IIS 元數(shù)據(jù)(metabase),這通常就是引起錯誤的原因。
你需要下載IIS 6.0 資源包。里面有你需要用到的“metaacl.vbs”腳本而我不需要的。[點我下載]
下載并安裝,然后運行Metabase Explorer(你可以搜索它,我的在“Program Files (x86)\IIS Resources\Metabase Explorer”目錄下)。 你應(yīng)該在你的IIS進程為SmtpSvc服務(wù)添加讀權(quán)限(我為IIS_IUSRS組添加了權(quán)限,在配置中查看為你工作的是否有權(quán)限)。
5) IIS是否有權(quán)限寫入拾取目錄
下面這步只是補充,因為你在下次使用網(wǎng)站來發(fā)送郵件可能會遇到權(quán)限錯誤。這時,你需要為你的IIS用戶添加寫入拾取目錄的權(quán)限(對我而言,我為“IIS_IUSES”添加了拾取目錄“c:\inetpub\mailroot”的寫入權(quán)限)。
這樣不管怎樣,使它為我工作了,但是對任意的服務(wù)器來說,可能因為我點擊了某些地方對程序有著關(guān)鍵作用的一些有魔力的多選框,所以如果你仍有問題,或者知道這些問題的答案,請在評論中提出,正如我所提到的,我可能修改了一些自己沒注意到的地方,導(dǎo)致可以發(fā)送郵件。如有不足,我將及時改正。
相關(guān)文章
asp.net core MVC之實現(xiàn)基于token的認(rèn)證
這篇文章主要介紹了asp.net core MVC之實現(xiàn)基于token的認(rèn)證,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05ASP.NET 恢復(fù)備份Sqlserver實現(xiàn)代碼
在線恢復(fù)和備份SQL Server的代碼,需要的朋友可以參考下。2010-04-04在AspNetCore中使用極驗做行為認(rèn)證的驗證流程
這篇文章主要介紹了在AspNetCore中使用極驗做行為認(rèn)證的驗證流程 ,本文有圖文介紹有實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2018-09-09asp.net 無法獲取的內(nèi)部內(nèi)容,因為該內(nèi)容不是文本 的解決方法
asp.net 無法獲取的內(nèi)部內(nèi)容,因為該內(nèi)容不是文本 的解決方法2009-12-12aspnetpager重寫url(偽靜態(tài))配置實例
這幾天要用到AspNetPager來做偽靜態(tài)分頁,找了些資料并把修改過程記錄下來。2013-04-04