如果你有一個(gè)需要偶爾發(fā)送郵件的Asp.Net的網(wǎng)站,可能會有代碼長的和下面的很像:
復(fù)制代碼 代碼如下:
//這是簡寫,并非實(shí)際項(xià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ù)器時(shí),你會遇到錯(cuò)誤提示信息"Cannot get IIS Pickup Directory!"
現(xiàn)在,我經(jīng)常稱呼自己為世界上最厲害的系統(tǒng)管理員。這不是我研究的方向。我并不非常擅長,但是有時(shí)在實(shí)際工作中我不得不面對和解決這些問題以獲取報(bào)酬。
1) SMTP服務(wù)是否安裝?
你的Web服務(wù)器或許還沒有安裝SMTP服務(wù),所以進(jìn)入服務(wù)管理中確定SMTP服務(wù)在功能列表中。如果不在,就需要你添加上去。
2) SMTP是否已配置?
僅僅確定SMTP服務(wù)已經(jīng)安裝是不夠的。首先,當(dāng)你服務(wù)器啟動(dòng)時(shí)(我曾經(jīng)遇到些客戶端軟件安裝前可以發(fā)送郵件,但是之后就不可以了,他們重啟了服務(wù)器,而Mail服務(wù)沒啟動(dòng),就這么簡單),確保你的SMTP服務(wù)也跟著自動(dòng)啟動(dòng)。進(jìn)入服務(wù),確保SMTP服務(wù)在那里,并且已經(jīng)啟動(dòng),啟動(dòng)類型也為自動(dòng)。
然后,你應(yīng)該配置SMTP服務(wù)——說句實(shí)話,我對此知道的不多,所以我就不詳細(xì)解釋了,但是你需要知道SMTP仍然是IIS6.0的一部分,所以你可以在IIS6.0的管理界面找到它。一個(gè)快速突破點(diǎn),因?yàn)樗赡懿环狭艘恍┙邮锗]件服務(wù)器需要一個(gè)完整的合格域名的要求,而你的服務(wù)器可能只有一個(gè)被嚴(yán)格被限制使用的簡單域名,比如像“Server15”之類的,所以在SMTP屬性中,Delivery標(biāo)簽下 ,點(diǎn)擊添加按鈕,給服務(wù)器一個(gè)真正的完整的滿足要求的域名。
3) 防火墻是打開的嗎?
你的一些操作有可能與防火墻沖突,所以現(xiàn)在是個(gè)好時(shí)機(jī)去排除SMTP安裝故障。你可以通過Telnet本機(jī)通過端口25,手動(dòng)給自己發(fā)個(gè)簡單的郵件。下面一個(gè)例子可以照著做。
復(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
點(diǎn)擊回車鍵,過會進(jìn)入發(fā)件箱 如果你不能連接,或者郵件不能送達(dá),這里還有一些其他問題需要你解決,因?yàn)榉阑饓κ遣粫绊懯叭∧夸浀墨@取。
4) IIS是否有權(quán)限獲取元數(shù)據(jù)(拾取目錄信息)
這里我們將會遇到實(shí)際的出錯(cuò)原因--你在網(wǎng)站跑的程序也許沒有權(quán)限獲取保存著拾取目錄名的IIS 元數(shù)據(jù)(metabase),這通常就是引起錯(cuò)誤的原因。
你需要下載IIS 6.0 資源包。里面有你需要用到的“metaacl.vbs”腳本而我不需要的。[點(diǎn)我下載]
下載并安裝,然后運(yùn)行Metabase Explorer(你可以搜索它,我的在“Program Files (x86)\IIS Resources\Metabase Explorer”目錄下)。 你應(yīng)該在你的IIS進(jìn)程為SmtpSvc服務(wù)添加讀權(quán)限(我為IIS_IUSRS組添加了權(quán)限,在配置中查看為你工作的是否有權(quán)限)。
5) IIS是否有權(quán)限寫入拾取目錄
下面這步只是補(bǔ)充,因?yàn)槟阍谙麓问褂镁W(wǎng)站來發(fā)送郵件可能會遇到權(quán)限錯(cuò)誤。這時(shí),你需要為你的IIS用戶添加寫入拾取目錄的權(quán)限(對我而言,我為“IIS_IUSES”添加了拾取目錄“c:\inetpub\mailroot”的寫入權(quán)限)。
這樣不管怎樣,使它為我工作了,但是對任意的服務(wù)器來說,可能因?yàn)槲尹c(diǎn)擊了某些地方對程序有著關(guān)鍵作用的一些有魔力的多選框,所以如果你仍有問題,或者知道這些問題的答案,請?jiān)谠u論中提出,正如我所提到的,我可能修改了一些自己沒注意到的地方,導(dǎo)致可以發(fā)送郵件。如有不足,我將及時(shí)改正。