FIX: 延伸預存程序的 xp_sendmail 不會執行成功地在 SQL Server 2000 SP2 或更新的版本

文章翻譯 文章翻譯
文章編號: 833045 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

徵狀

當您嘗試傳送電子郵件訊息使用 xp_sendmail 延伸預存程序在電腦上的,執行 Microsoft SQL Server 2000 Service Pack 2 (SP2) 或稍後,xp_sendmail 延伸預存程序可能無法順利執行。您可能會收到下列錯誤訊息:
伺服器: msg 18025、 層級 16,狀態 1、 行 0
xp_sendmail: 失敗,發生郵件錯誤 0x80040115
附註下列兩個條件均為真時,通常就會發生這個問題:
  • 沒有執行 Microsoft SQL Server 2000 的電腦和執行 Microsoft Exchange Server 的電腦之間的網路連線中斷。
  • Exchange 伺服器重新啟動後第一次執行 xp_sendmail 延伸預存程序發生錯誤的 SQL Server 執行個體上。

解決方案

服務套件資訊

如果要解決這個問題,取得最新的 Service Pack,Microsoft SQL Server 2000。如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
290211如何取得最新的 SQL Server 2000 Service Pack

Hotfix 資訊

此 Hotfix 的英文版在檔案屬性 (或更新版本的檔案屬性) 如下列表格中所列。這些檔案的日期和時間為 Coordinated Universal Time (UTC)。當您檢視檔案資訊時,會將它轉換為當地時間。若要到 UTC 與當地時間差異使用 [中日期] 和 [時間] 工具,在 [控制台] 中的 [時區] 索引標籤]。
   Date         Time   Version             Size   File name
   ---------------------------------------------------------------------
   31-May-2003  18:45  2000.80.818.0      78,400  Console.exe      
   28-Oct-2003  04:21  2000.80.873.0     315,968  Custtask.dll     
   30-Jan-2004  16:29  2000.80.911.0      33,340  Dbmslpcn.dll     
   25-Apr-2003  02:12                    786,432  Distmdl.ldf
   25-Apr-2003  02:12                  2,359,296  Distmdl.mdf
   30-Jan-2003  01:55                        180  Drop_repl_hotfix.sql
   12-Sep-2003  03:26  2000.80.859.0   1,905,216  Dtspkg.dll       
   26-Aug-2003  20:16  2000.80.854.0     528,960  Dtspump.dll      
   23-Jun-2003  22:40  2000.80.837.0   1,557,052  Dtsui.dll        
   23-Jun-2003  22:40  2000.80.837.0     639,552  Dtswiz.dll       
   24-Apr-2003  02:51                    747,927  Instdist.sql
   03-May-2003  01:56                      1,581  Inst_repl_hotfix.sql
   30-Jan-2004  16:29  2000.80.911.0      90,692  Msgprox.dll      
   01-Apr-2003  02:07                      1,873  Odsole.sql
   30-Jan-2004  16:29  2000.80.911.0      62,024  Odsole70.dll     
   30-Jan-2004  16:29  2000.80.911.0      25,144  Opends60.dll     
   07-May-2003  18:47                    132,096  Opends60.pdb
   30-Jan-2004  16:28  2000.80.911.0      57,904  Osql.exe         
   02-Apr-2003  23:15  2000.80.797.0     279,104  Pfutil80.dll     
   04-Aug-2003  18:17                    550,780  Procsyst.sql
   12-Sep-2003  00:37                     12,305  Qfe469315.sql
   22-May-2003  22:57                     19,195  Qfe469571.sql
   30-Jan-2004  01:16                  1,090,380  Replmerg.sql
   30-Jan-2004  16:29  2000.80.911.0     221,768  Replprov.dll     
   30-Jan-2004  16:29  2000.80.911.0     307,784  Replrec.dll      
   29-Jan-2004  23:24  2000.80.911.0     159,813  Replres.rll
   06-Sep-2003  00:00                  1,087,150  Replsys.sql
   13-Aug-2003  16:28                    986,603  Repltran.sql
   30-Jan-2004  16:29  2000.80.911.0     287,304  Rinitcom.dll     
   30-Jan-2004  16:29  2000.80.911.0      57,916  Semnt.dll        
   29-Jul-2003  20:13  2000.80.819.0     492,096  Semobj.dll       
   31-May-2003  18:27  2000.80.818.0     172,032  Semobj.rll
   02-Jan-2004  19:42  2000.80.904.0      53,832  Snapshot.exe     
   09-Dec-2003  20:07                    117,834  Sp3_serv_uni.sql
   05-Feb-2004  00:46  2000.80.913.0      28,672  Sqlagent.dll     
   05-Feb-2004  00:47  2000.80.913.0     311,872  Sqlagent.exe     
   19-Feb-2004  18:02  2000.80.916.0     168,001  Sqlakw32.dll     
   30-Jan-2004  16:29  2000.80.911.0   4,215,360  Sqldmo.dll       
   07-Apr-2003  17:44                     25,172  Sqldumper.exe    
   29-Jan-2004  23:17  2000.80.911.0      28,672  Sqlevn70.rll
   05-Mar-2004  17:13  2000.80.922.0     180,792  Sqlmap70.dll     
   03-Sep-2003  02:56  2000.80.857.0     188,992  Sqlmmc.dll       
   02-Sep-2003  23:03  2000.80.857.0     479,232  Sqlmmc.rll
   22-Oct-2003  00:08  2000.80.871.0     401,984  Sqlqry.dll       
   30-Jan-2004  16:29  2000.80.911.0      57,920  Sqlrepss.dll     
   09-Mar-2004  19:54  2000.80.922.0   7,614,545  Sqlservr.exe     
   09-Mar-2004  19:57                 12,788,736  Sqlservr.pdb
   30-Jan-2004  16:29  2000.80.911.0     590,396  Sqlsort.dll      
   30-Jan-2004  16:29  2000.80.911.0      45,644  Sqlvdi.dll       
   30-Jan-2004  16:29  2000.80.911.0     106,588  Sqsrvres.dll     
   30-Jan-2004  16:29  2000.80.911.0      33,340  Ssmslpcn.dll     
   30-Jan-2004  16:29  2000.80.911.0      82,492  Ssnetlib.dll     
   30-Jan-2004  16:29  2000.80.911.0      25,148  Ssnmpn70.dll     
   28-Oct-2003  04:21  2000.80.873.0     123,456  Stardds.dll      
   30-Jan-2004  16:29  2000.80.911.0     158,240  Svrnetcn.dll     
   30-Jan-2004  16:29  2000.80.911.0      76,416  Svrnetcn.exe     
   30-Apr-2003  23:52  2000.80.816.0      45,132  Ums.dll          
   30-Apr-2003  23:52                    132,096  Ums.pdb
   30-Jan-2004  16:29  2000.80.911.0      98,872  Xpweb70.dll    
附註由於檔案相依性最新版 Hotfix 或包含這些檔案的功能也可能包含其他檔案。

狀況說明

Microsoft 已確認<適用於>一節所列之 Microsoft 產品確實有此問題。 這個問題,首先已經在 Microsoft SQL Server 2000 服務套件 4 中獲得修正。

其他可行方案

如果要解決這個問題,確認網路] 連線,並再重新傳送郵件]。您可以設定 [xp_sendmail 延伸預存程序,藉由設定登錄項目,或您的應用程式程式碼加入重試邏輯的 [重試] 選項。 如果要執行此動作使用其中一個下列方法:
  • 方法 1: 設定 xp_sendmail 延伸預存程序的 [重試] 選項

    依預設在您安裝此修正程式如果 xp_sendmail 延伸預存程序遇到 HRESULT = 0x80040115xp_sendmail 延伸預存程序會嘗試再次傳送郵件之後它睡眠 1000年毫秒。但是,您可以設定重試次數和每一個重試等候時間間隔的數目。

    重要這個區段、 方法或任務包含告訴您如何修改登錄的步驟。然而,如果您不當修改登錄,可能會發生嚴重的問題。因此,執行這些步驟時請務必小心。為加強保護,修改登錄之前,請務必將它備份起來。以後您就可以在發生問題時還原登錄。如需有關如何備份和還原登錄的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
    322756如何備份和還原在 Windows 登錄
    1. 若要進行的重試次數將 NumberOfTimesToRetryOnNetworkError DWORD 值新增至下列登錄機碼,並再設定值:
      • 對於的 SQL Server 2000 的一個預設值] 實例使用 [HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer 登錄機碼。
      • 對於 SQL Server 2000 具名執行個體,使用 [HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\ Instance Name \MSSQLServer 登錄機碼。
    2. 若要進行 xp_sendmail 重試選項的等待間隔將 WaitIntervalForRetryOnNetworkError DWORD 值新增至下列登錄機碼,並再設定值:
      • 對於的 SQL Server 2000 的一個預設值] 實例使用 HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer 登錄金鑰。
      • SQL Server 2000 具名執行個體,使用 [HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\ Instance Name \MSSQLServer 登錄機碼]。
  • 方法 2: 加入重試邏輯,以您的應用程式程式碼

    如果要執行這項操作,請依照下列步驟執行:
    1. 請確認網路連線設定為郵件伺服器的電腦。
    2. 確定網路介面卡和相對應的驅動程式正常運作。
    3. 在您使用傳送電子郵件訊息使用 xp_sendmail 延伸預存程序,以便在失敗發生後電子郵件訊息可能會重新傳送該 Transact-SQL 指令碼中使用適當的邏輯。如果要執行這項操作,您可以使用類似下列的 Transact-SQL 指令碼:
      DECLARE
      @EmailAddTO varchar(30),
      @EmailSubject varchar(130),
      @EmailText varchar(255),
      @return int,
      @Counting int 
      
      BEGIN
      /* SET value */
      SET @return = 0 
      SET @Counting = 0 
      SET @EmailSubject = 'TEST EMAIL' 
      SET @EmailText = 'This is a test email'
      SET @EmailAddTO = '<RecipientAddress>' 
      
      /* LOOP. If e-mail is sent, break loop; ELSE WAIT 10 seconds, and then RETRY. */
      WHILE 1=1
      BEGIN
      SET @Counting = @Counting + 1
      
      EXEC @return = master.dbo.xp_sendmail 
      @recipients = @EmailAddTO,
      @message = @EmailText ,
      @subject = @EmailSubject
      
      /* CHECK value, break if SUCCESS */
      IF @return = 0
      BEGIN
      PRINT 'EMAIL SENT'
      BREAK
      END
      ELSE
      BEGIN
      /* Try 5 times */
      IF @Counting = 5
      BREAK 
      PRINT 'EMAIL FAILED, WAIT 10 SECONDS, TRY AGAIN'
      /* 000 hours, 00 minutes, and 10 seconds */
      WAITFOR DELAY '000:00:10'
      END
      END
      END
      GO

其他相關資訊

當您傳送電子郵件訊息使用 xp_sendmail 延伸預存程序時,xp_sendmail 延伸預存程序會讓許多 MAPI API 的呼叫。不過,此 Hotfix 中的 [重試] 選項只會加入為下列的錯誤訊息造成失敗的單一呼叫:
HRESULT = 0x80040115

?考

如需有關軟體更新術語的詳細資訊,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
824684用來描述 Microsoft 軟體更新標準術語的說明
如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中 「 文件]:
263556如何設定 SQL Mail
315886常見的 SQL Mail 問題
820220當使用延伸預存程序 xp_sendmail 傳送電子郵件時,就會發生 0x80070005 或 0x80040005 錯誤

屬性

文章編號: 833045 - 上次校閱: 2007年11月2日 - 版次: 4.3
這篇文章中的資訊適用於:
  • Microsoft SQL Server 2000 Desktop Engine (MSDE) SP2
  • Microsoft SQL Server 2000 Desktop Engine (MSDE) SP3
  • Microsoft SQL Server 2000 Service Pack 2
  • Microsoft SQL Server 2000 Service Pack 3
  • Microsoft SQL Server 2000 Service Pack 2
  • Microsoft SQL Server 2000 Service Pack 3
  • Microsoft SQL Server 2000 Service Pack 2
  • Microsoft SQL Server 2000 Personal Edition Service Pack 3
  • Microsoft SQL Server 2000 Service Pack 2
  • Microsoft SQL Server 2000 Service Pack 3
關鍵字:?
kbmt kbhotfixserver kbqfe kbregistry kbsqlserv2000presp4fix kbfix kbbug kbemail kbdll kbprb kberrmsg kbsqlservmail KB833045 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:833045
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com