我所負責的網站伺服器沒有防火牆的保護,經常被******,只好讓一個做網管的朋友幫我在服務上做一些許可權設定,沒想到做完許可權設定後,網站無法用Jmail元件發郵件了,每次都提示:
Server 物件 錯誤 `ASP 0178 : 80070005`
Server.CreateObject 訪問錯誤
../sendmail.asp,行 3
檢查許可權時,對 Server.CreateObject 的呼叫失敗。拒絕對此物件的訪問。
Server.CreateObject 訪問錯誤
../sendmail.asp,行 3
檢查許可權時,對 Server.CreateObject 的呼叫失敗。拒絕對此物件的訪問。
檢視第3行的程式碼是Set JMail = Server.CreateObject(“JMail.SMTPMail”) ,這個問題讓我頭疼了好久,上google、csdn查了無數次,都沒有找到解決的方法,後來由於工作忙,乾脆把它仍到一邊不管了,一放就是大半年。
近來迫於工作需要,沒有自動發郵件功能真的很不方便,網站上收到有很多提交的表單,想立即發一封通知郵件到自己郵箱,於是又把這個問題拿出來查,把jmail元件卸掉又重灌,裝好後,測試發郵件,不成功,用阿江探針查詢,顯示 Jmail元件沒開啟,在網上搜了一陣,無意中在一個網站上找到一個答案說是沒有給IIS帳號開放對 dll 檔案的讀寫許可權,右擊安裝路徑下的 jmail.dll 檔案,選屬性,把 ISUR_xxx 和 IWAM_xxx 兩個帳號加進去,給予寫入許可權,確定。測試,發現郵件能發了,可是速度很慢,還好,成功了一半。
我的伺服器是雙線出口的,有一個內網IP,把外網IP換成內網IP試試,找到JMail.ServerAddress = “xxx.xxx.xxx.xxx” 這句程式碼,換成內網IP,測試,成功了,1秒種就發出去了,至此這個問題解決了。
總結:
遇到Jmail元件發郵件的問題,按以下幾點逐個查詢。
1、看伺服器上的smtp服務是否已啟動。
2、安裝好jmail後,給IIS使用者對 jmail.dll檔案的寫許可權。
3、用阿江探針,看Jmail元件是否已成功開啟。(見附件)
4、用正確的郵件傳送程式碼測試。
附郵件傳送測試程式碼:
dim JMail
on error resume next
Set JMail = Server.CreateObject(“JMail.SMTPMail”)
JMail.ServerAddress = “xxx.xxx.xxx.xxx” `你伺服器的IP或域名
JMail.LazySend = true
JMail.Charset = mcharset
JMail.ContentType = “text/html”
JMail.Sender = “[email]xxx@xxx.com[/email]” `傳送者郵箱
JMail.Subject = “測試發郵件”
on error resume next
Set JMail = Server.CreateObject(“JMail.SMTPMail”)
JMail.ServerAddress = “xxx.xxx.xxx.xxx” `你伺服器的IP或域名
JMail.LazySend = true
JMail.Charset = mcharset
JMail.ContentType = “text/html”
JMail.Sender = “[email]xxx@xxx.com[/email]” `傳送者郵箱
JMail.Subject = “測試發郵件”
JMail.AddRecipient “[email]xxx@xxx.com[/email]” `接收者郵箱
JMail.Body = “測試郵件”
JMail.Priority = 3
JMail.AddHeader “Originating-IP”, Request.ServerVariables(“REMOTE_ADDR”)
JMail.Execute
JMail.close
set JMail=nothing
if err.number<>0 then
response.write err.description
err.clear
else
response.write “傳送成功”
end if
JMail.AddHeader “Originating-IP”, Request.ServerVariables(“REMOTE_ADDR”)
JMail.Execute
JMail.close
set JMail=nothing
if err.number<>0 then
response.write err.description
err.clear
else
response.write “傳送成功”
end if