[FIX] SQL Server 2000 SP2 以降で拡張ストアド プロシージャ xp_sendmail が正常に実行されない

文書翻訳 文書翻訳
文書番号: 833045 - 対象製品
重要 : この資料には、レジストリの編集方法が記載されています。万一に備えて、編集の前には必ずレジストリをバックアップし、レジストリの復元方法を理解しておいてください。バックアップ、復元、および編集方法の詳細を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
256986 Microsoft Windows レジストリの説明
すべて展開する | すべて折りたたむ

目次

現象

Microsoft SQL Server 2000 Service Pack 2 (SP2) 以降を実行するコンピュータで xp_sendmail 拡張ストアド プロシージャを使用して電子メール メッセージを送信しようとすると、xp_sendmail 拡張ストアド プロシージャが正常に実行されない場合があります。次のエラー メッセージが表示されることがあります。
サーバー : メッセージ 18025、レベル 16、状態 1、行 0
xp_sendmail: メール エラー 0x80040115 で失敗しました
: この問題は、通常、以下の 2 つの条件に該当する場合に発生します。
  • Microsoft SQL Server 2000 を実行するコンピュータと Microsoft Exchange Server を実行するコンピュータ間のネットワーク接続が失われています。
  • SQL Server のインスタンス上で xp_sendmail 拡張ストアド プロシージャを最初に実行した後、Exchange Server を再起動しました。エラーはそのインスタンス上で発生します。

解決方法

Service Pack の情報

この問題を解決するには、Microsoft SQL Server 2000 の最新の Service Pack を入手します。関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
290211 最新の SQL Server 2000 Service Pack の入手方法

修正プログラムの情報

修正プログラム (英語版) のファイル属性は次表のとおりです。ただし、これより新しい修正プログラムがリリースされている可能性もあります。各ファイルの日付および時刻は、世界協定時刻 (UTC) で示されています。ファイル情報に表示される時刻は、ローカル時刻に変換されています。UTC とローカル時刻との時差を確認するには、コントロール パネルの [日付と時刻] の [タイム ゾーン] タブを使用してください。
   日付            時刻    バージョン           サイズ     ファイル名
   ---------------------------------------------------------------------
   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    
: ファイルの依存関係のため、最新の修正プログラムまたは機能には上記以外のファイルが追加されていることがあります。

状況

マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。

この問題は、Microsoft SQL Server 2000 Service Pack 4 で最初に修正されました。

回避策

この問題を回避するには、ネットワーク接続を確認した後、再度電子メールを送信します。レジストリ エントリを構成するか、アプリケーション コードに再試行ロジックを追加することにより、xp_sendmail 拡張ストアド プロシージャの再試行オプションを設定できます。これを行うには、次のいずれかの方法を使用します。
  • 方法 1 : xp_sendmail 拡張ストアド プロシージャの再試行オプションを構成する

    デフォルトでは、この修正プログラムをインストール後、xp_sendmail 拡張ストアド プロシージャで HRESULT = 0x80040115 のエラーが発生した場合、xp_sendmail 拡張ストアド プロシージャは 1000 ミリ秒待機した後、再度電子メールを送信しようとします。ただし、再試行の回数と各再試行の待機間隔は、任意に設定できます。

    警告 : レジストリ エディタの使い方を誤ると、深刻な問題が発生することがあります。最悪の場合、オペレーティング システムの再インストールが必要になることがあります。マイクロソフトは、レジストリ エディタの誤用により発生した問題に関しては、一切責任を負わないものとします。レジストリ エディタは、自己の責任においてご使用ください。
    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 に対して多数の呼び出しが行われます。ただし、この修正プログラムの再試行オプションは、次のエラー メッセージが表示されるエラーの原因となっていた単一の呼び出しにのみ追加されます。
HRESULT = 0x80040115

関連情報

関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
824684 マイクロソフトのソフトウェアの更新で使用される一般的な用語の説明
関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
263556 [INF] SQL Mail の設定方法
315886 [INF] SQL Mail の一般的な問題
820220 [PRB] xp_sendmail 拡張ストアド プロシージャを使用して電子メールを送信すると、0x80070005 または 0x80040005 エラーが発生する

プロパティ

文書番号: 833045 - 最終更新日: 2006年3月24日 - リビジョン: 3.2
この資料は以下の製品について記述したものです。
  • Microsoft SQL Server 2000 Desktop Engine
  • Microsoft SQL Server 2000 Desktop Engine
  • 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
キーワード:?
kberrmsg kbbug kbfix kbregistry kbqfe kbsqlservmail kbdll kbsqlserv2000presp4fix kbprb kbemail kbhotfixserver KB833045
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

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