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

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本: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=1BEGINSET @Counting = @Counting + 1EXEC @return = master.dbo.xp_sendmail @recipients = @EmailAddTO,@message = @EmailText ,@subject = @EmailSubject/* CHECK value, break if SUCCESS */IF @return = 0BEGINPRINT 'EMAIL SENT'BREAKENDELSEBEGIN/* Try 5 times */IF @Counting = 5BREAK PRINT 'EMAIL FAILED, WAIT 10 SECONDS, TRY AGAIN'/* 000 hours, 00 minutes, and 10 seconds */WAITFOR DELAY '000:00:10'ENDENDENDGO
其他相關資訊
當您傳送電子郵件訊息使用 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 - 最後檢閱時間:12/08/2015 05:37:24 - 修訂: 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

  • kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbregistry kbsqlserv2000presp4fix kbfix kbbug kbemail kbdll kbprb kberrmsg kbsqlservmail KB833045 KbMtzh
意見反應