文章編號: 816789 - 上次校閱: 2005年7月12日 - 版次: 5.2

以 「 每個人讀取的存取群組中移除您在安裝 Exchange 2000 SP3 之後

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。

在此頁中

全部展開 | 全部摺疊

徵狀

如果您在安裝 Exchange 2000 Server Service Pack 3 (SP3) 的位置在電腦上使用共同作業資料物件的 Windows (CDOSYS) 應用程式,Exchange 2000 (CDOEX) 應用程式的共同作業資料物件或 System.Web.Mail 傳送簡易郵件傳送通訊協定 (SMTP) 郵件您會收到下列錯誤訊息:
CDO.message.1 (0x80040220)
SendUsing 」 設定值不正確。
附註System.Web.Mail 是 CDOSYS 可讓您建立及使用 CDOSYS 訊息元件來傳送訊息到受管理的包裝函式。

原因

之所以發生這個問題,是因為網際網路資訊服務 (IIS) 中繼庫和 Microsoft Active Directory 目錄服務的讀取權限已被移除為每個人] 群組。這個存取已被移除因為的安全性所做的修改在 Exchange 2000 Server SP3。 CDOEX、 CDOSYS 和 System.Web.Mail 必須可存取 IIS Metabase 存取收取目錄路徑位置的相關資訊。此問題的發生原因,是當您使用 Sendusingpickup 方法時,且應用程式的程式碼中未指定此資訊。因為存取受限制所以非管理使用者的安全性內容下執行應用程式無法從 IIS Metabase] 與 [Active Directory 讀取這項資訊。

解決方案

如果要解決這個問題,使用其中一個因應措施 > 因應措施 > 一節中。

附註範例程式碼的因應措施是撰寫動態伺服器網頁 (ASP) 頁面的內容。

因應措施

如果要解決這個問題,您必須修改組態] 或 [程式碼。組態變更可以被展快速,但更刻意,同時考慮應用程式和其資源的安全性,必須進行程式碼變更。

附註還原至 IIS Metabase 的讀取權限的 「 每個人群組不是這個問題的因應措施。還原此存取 reintroduces Exchange 2000 Server SP3 解決的弱點。

如此套用 Exchange 2000 Server SP3 之後,使用 CDOEX 和 CDOSYS 應用程式,請使用下列因應措施的其中一個選項。在 < 其他可行方案 1 和其他可行方案 2,您可以修改系統管理的組態。在 < 其他可行方案 3 和其他可行方案 4,您可以修改程式碼。雖然您只能有套用一個因應措施解決問題,您必須決定哪一種解決辦法是針對使用者的應用程式最適合的解決方案。

若要修改系統管理組態,您必須選擇性地授與存取到 IIS Metabase。在 < 其他可行方案 1 和其他可行方案 2,不會變更應用程式的程式碼,但需要 IIS Metabase 的 「 讀取 」 權限的帳戶被授與存取。您可能可以授與 IIS 中繼資料庫存取帳戶 (因應措施 1) 下執行應用程式,或者您也可以為該用途 (因應措施 2) 建立新的帳戶。

Adadd.vbs、 Adlist.vbs 和 Addel.vbs 指令碼檔案至 IIS Metabase 授與存取權。請參閱附錄 > 一節結尾的本文,這些指令碼檔案的相關資訊。

因為共同作業資料物件 (CDO) 呼叫 RevertToSelf 函式,才能存取 IIS Metabase,您可以加入應用程式處理序執行該帳戶。這是典型的 ASP 網頁 IWAM_ ComputerName 帳戶。

解決方法 1

至少 destabilizing 選項是判斷應用程式正在執行之下,並再授與帳戶存取權 IIS Metabase 哪一個帳戶。但是,因為其他應用程式可能會使用現有的帳戶 (比方說 IWAM_ XXX 或 IUSR_ XXX),這項因應措施可能會造成弱點如果這些其他應用程式授權給 IIS Metabase 的存取。這項因應措施的優點是應用程式的程式碼和 SMTP 組態不變更。這項因應措施的缺點就是將它可能不必要地存取權授與 IIS Metabase。

若要判斷哪一個帳戶應用程式下執行和要授與帳戶存取權 IIS] Metabase 請依照下列步驟執行:
  1. 將.vbs 檔案儲存到目錄中,您的伺服器上。
  2. 在 IIS,找出包含您的應用程式的虛擬目錄、 虛擬目錄上按一下滑鼠右鍵,然後按一下 [內容]。
  3. 按一下 [目錄安全性] 索引標籤,然後按一下 [匿名存取及驗證控制,之下的 [編輯]。
  4. 在 [驗證方法] 對話方塊請確定已選取 [匿名存取] 核取方塊,然後按一下 [帳號] 用於匿名存取,] 下方的 [編輯]。
  5. 記下 匿名使用者帳號] 對話方塊所顯示的帳戶名稱。
  6. 按一下 [取消] 以關閉對話方塊]。
  7. 在命令提示字元將目錄變更到包含.vbs 檔案,在步驟 1 中的目錄。
  8. 使用 Adadd.vbs 對 IIS Metabase 到您在步驟 5 中所記下該帳戶授與存取。如果要執行這項操作,請在命令提示字元執行下列命令:

    cscript adadd.vbs ComputerName \ AccountName

    附註在網域控制站上使用 DomainName \ AccountName,或未指定電腦名稱或網域名稱。 您只需要提供 AccountName adadd.vbs 之後。在網域控制站上新增 IWAM_ computername,請在命令提示字元執行下列命令其中之一:

    cscript adadd.vbs DomainName \IWAM_ ComputerName

    -或者-

    cscript adadd.vbs IWAM_ ComputerName

    您有時候也必須藉由使用 Adadd.vbs 授與 IIS Metabase IWAM_ ComputerName 帳戶存取。如果要執行這項操作,請在命令提示字元執行下列命令:

    cscript adadd.vbs ComputerName \IWAM_ ComputerName
  9. 請使用 Adlist.vbs 來確認帳戶已新增至 IIS Metabase 存取清單。如果要執行這項操作,請在命令提示字元執行下列命令:

    cscript adlist.vbs
  10. 停止並重新啟動 IIS 管理服務及任何依存的服務。
  11. 執行 Exchange 2000 的電腦上授與使用者程式 Files\exchsrvr\mailroot\vsi # \pickup 目錄路徑的寫入權限。不執行 Exchange 2000 的電腦上授與使用者 Inetpub\mailroot\pickup 目錄路徑的寫入權限。
  12. 等候 Active Directory 複寫到 IIS Metabase。
  13. 執行應用程式。

    現在的應用程式的運作方式如預期般運作。

解決方法 2

您可以建立帳號、 授與該帳戶存取權給 IIS] 中繼庫,然後設定應用程式以該帳戶身分執行的執行位置的虛擬目錄。這項因應措施的優點是應用程式的程式碼和 SMTP 組態不變更。

建立新的帳戶,讓應用程式下執行,並設定虛擬目錄,請依照下列步驟執行:
  1. 將.vbs 檔案儲存到目錄中,您的伺服器上。
  2. 使用 Active Directory 使用者和電腦來建立電腦帳戶 (比方說 CdoExAccount),然後將此帳戶新增到 [使用者] 群組。

    這個帳戶不需要信箱。
  3. 在 IIS,找出包含您的應用程式的虛擬目錄、 虛擬目錄上按一下滑鼠右鍵,然後按一下 [內容]。
  4. 按一下 [目錄安全性] 索引標籤,然後按一下 [匿名存取及驗證控制,之下的 [編輯]。
  5. 在 [驗證方法] 對話方塊請確定已選取 [匿名存取] 核取方塊,然後按一下 [帳號] 用於匿名存取,] 下方的 [編輯]。
  6. 在 [匿名使用者帳號] 對話方塊,請依照下列步驟執行:
    1. 在 [使用者名稱] 方塊輸入您在步驟 2 中建立帳戶的名稱。

      附註在網域控制站上使用 DomainName \ AccountName,或未指定電腦名稱或網域名稱。 您只需要提供 AccountName。如果您建立電腦層級帳戶,以下列格式輸入帳戶名稱: ComputerName \ AccountName
    2. 網域控制站上使用 <DomainName>\<AccountName>或未指定電腦名稱或網域名稱 (只是提供給 <AccountName>)
    3. 按一下以清除 [允許 IIS 控制密碼] 核取方塊。
    4. 在 [密碼] 方塊中輸入帳戶的密碼。
    5. 按一下 [確定],並重新輸入密碼,在產生的對話方塊。
  7. 按一下 [確定] 以關閉所有對話方塊。
  8. 在命令提示字元將目錄變更到包含.vbs 檔案,在步驟 1 中的目錄。
  9. 使用 Adadd.vbs 對 IIS Metabase 到您在步驟 2 中記下該帳戶授與存取。如果要執行這項操作,請在命令提示字元執行下列命令:

    cscript adadd.vbs ComputerName \ AccountName

    附註在網域控制站上使用 DomainName \ AccountName,或未指定電腦名稱或網域名稱。 您只需要提供 AccountName adadd.vbs 之後。在網域控制站上新增 IWAM_ computername,請在命令提示字元執行下列命令其中之一:

    cscript adadd.vbs DomainName \IWAM_ ComputerName

    -或者-

    cscript adadd.vbs IWAM_ ComputerName

    您有時候也必須藉由使用 Adadd.vbs 授與 IIS Metabase IWAM_ ComputerName 帳戶存取。如果要執行這項操作,請在命令提示字元執行下列命令:

    cscript adadd.vbs ComputerName \IWAM_ ComputerName
  10. 停止並重新啟動 IIS 管理服務及任何依存的服務。
  11. 執行 Adlist.vbs 請確定帳戶已新增至 IIS Metabase 存取清單。如果要執行這項操作,請在命令提示字元執行下列命令:

    cscript adlist.vbs
  12. 執行 Exchange 2000 的電腦上授與使用者程式 Files\exchsrvr\mailroot\vsi # \pickup 目錄路徑的寫入權限。不執行 Exchange 2000 的電腦上授與使用者 Inetpub\mailroot\pickup 目錄路徑的寫入權限。
  13. 等候 Active Directory 複寫到 IIS Metabase。
  14. 執行應用程式。

    現在的應用程式的運作方式如預期般運作。

解決方法 3

如果您沒有明確地指定 sendusing 方法程式碼中,cdoSendUsingPickup 值會是預設值。但是,您可以明確地指定 cdoSendUsingPickup 和收取目錄路徑在程式碼中。若要使用收取目錄方法,必須設定本機 SMTP 轉送。

這項因應措施的優點是組態的提高應用程式控制項和因應措施不限於第一個 SMTP 服務執行個體。有多部 SMTP 虛擬伺服器的電腦上預設組態選取 IIS Metabase 中的第一個的收取目錄。這個收取目錄可能不是應用程式需要的目錄。藉由明確指定收取目錄,您可以確定預設組態選取正確的收取目錄。這項因應措施的缺點是更易損壞比其他因應措施。Exchange 2000 安裝,或管理組態的變更可能會造成應用程式停止運作由於的收取目錄的位置的變更。
程式碼範例
下列程式碼範例會示範如何明確設定 cdoSendUsingPickup 和收取目錄位置:
<%@ Language=VBScript %>
	<%
	    Dim iMsg
	    Dim iConf
	    Dim Flds
	    Const cdoSendUsingPickup = 1
	
	    'For CDOSYS, the pickup directory is located at c:\inetpub\mailroot\pickup.
	    Const strPickup = "c:\Program Files\Exchsrvr\mailroot\vsi 1\Pickup"
	
	    'Create the message object.
	     Set iMsg = CreateObject("CDO.Message")
	
	    'Create the configuration object.
	     Set iConf = iMsg.Configuration
	
	    With iConf.Fields
	  	.item("http://schemas.microsoft.com/cdo/configuration/sendusing")= cdoSendUsingPickup
	       .item("http://schemas.microsoft.com/cdo/configuration/smtpserverpickupdirectory") = strPickup
	       .Update
	    End With
	
	    'Set the To, From, Subject, and Body properties of the message.
	    With iMsg
	       .To = "someone@example.com"
	       .From = "someone@example.com"
	       .Subject = "Test message by using CDOEx and cdoSendUsingPickup sent on: "  & now()
	       .TextBody = "This is a test by using CDOEx"
	       .Send
	    End With 
	    Set iMsg = Nothing
	 %>

因應措施 4

而非訊息寫入本機收取目錄,您可以寫入訊息遠端 SMTP 伺服器在網路上。這項因應措施的優點是較低的整體資源消耗和立即和詳細的錯誤資訊。這項因應措施的缺點是遠端 SMTP 伺服器可能無法使用和您失去自然佇列機制收取目錄中。
範例程式碼
下列的修改過的範例程式碼在 Exchange 2000 Server SP3 上運作。注意這個範例會加入建立並設定組態 object.
<%@ Language=VBScript %>
	<%
	    Dim iMsg
	    Dim iConf
	    Dim Flds
	    Const cdoSendUsingPort = 2
	    Const strSmartHost = "MySmartHostServer"
	
	    'Create the message object.
	    Set iMsg = CreateObject("CDO.Message")
	
	    'Create the configuration object.
	    Set iConf = iMsg.Configuration
	
	    'Set the fields of the configuration object to send by using SMTP through port 25.
	    With iConf.Fields
	       .item("http://schemas.microsoft.com/cdo/configuration/sendusing") = cdoSendUsingPort
	       .item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSmartHost
	       .Update
	    End With
	
	    'Set the To, From, Subject, and Body properties of the message.
	    With iMsg
	       .To = "someone@example.com"
	       .From = "someone@example.com"
	       .Subject = "Test message by using CDOEx and cdoSendUsingPort, sent on: "  & now()
	       .TextBody = "This is a test by using CDOEx"
	       .Send
	    End With
	    set iMsg = Nothing
	 %> 

附錄

若要下載指令碼檔案,將讀取權限授與 「 IIS Metabase] 與 [Active Directory 請造訪下列 Microsoft Web 網站:
http://download.microsoft.com/download/9/7/0/9706f302-99f8-49f9-8aa4-df66d771feaf/smtppermissionsscripts.exe (http://download.microsoft.com/download/9/7/0/9706f302-99f8-49f9-8aa4-df66d771feaf/smtppermissionsscripts.exe)
下載包含下列的指令碼檔案。
摺疊此表格展開此表格
Adlist.vbs列出存取控制清單 (ACL) 的伺服器在 Active Directory (如果有的話) 或在 IIS Metabase 上每個 SMTP 服務執行個體。
Adadd.vbs授與所有伺服器上的 SMTP 服務執行個體的帳戶唯讀存取。
Addel.vbs從伺服器上的所有 SMTP 服務執行個體中移除帳戶的所有存取控制項目 (ACE)。
每個指令碼會使用 Active Directory,判斷電腦是否執行 Exchange 2000。如果電腦執行 Exchange 2000,在 Active Directory 進行變更,並 Ds2mb.dll 檔案將所做的變更複寫到 IIS Metabase 的消耗由 SMTP。如果電腦不在執行 Exchange 2000,變更會直接在 IIS Metabase 中進行。


這篇文章中的資訊適用於:
  • Microsoft Exchange Server 2003 Standard Edition
  • Microsoft Exchange 2000 Enterprise Server
  • Microsoft Exchange 2000 Server Standard Edition
關鍵字:?
kbmt kbdownload KB816789 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:816789? (http://support.microsoft.com/kb/816789/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。