REVISIÓN: El procedimiento almacenado extendido xp_sendmail no se ejecuta correctamente en SQL Server 2000 SP2 o posterior

Seleccione idioma Seleccione idioma
Id. de artículo: 833045 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Síntomas

Cuando intenta enviar un mensaje de correo electrónico mediante el xp_sendmail procedimiento almacenado extendido en un equipo que se está ejecutando Microsoft SQL Server 2000 Service Pack 2 (SP2) o posterior, el procedimiento almacenado extendido xp_sendmail no funcionen correctamente. Es posible que reciba un mensaje de error parecido al siguiente:
Servidor: Msg 18025, nivel 16, estado 1, línea 0
xp_sendmail: correo error 0 x 80040115
Nota Este problema se produce normalmente cuando las dos condiciones siguientes se cumplen:
  • Hay una pérdida de conectividad de red entre el equipo que ejecuta Microsoft SQL Server 2000 y el equipo que ejecuta Microsoft Exchange Server.
  • El servidor de Exchange se reinicia después de la primera ejecución de la xp_sendmail el procedimiento almacenado en la instancia de SQL Server donde se ha producido el error extendido.

Solución

Información de Service Pack

Para resolver este problema, consiga el Service Pack más reciente para Microsoft SQL Server 2000. Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
290211Cómo obtener el Service Pack más reciente de SQL Server 2000

Información de revisiones

La versión en inglés de este hotfix tiene los atributos de archivo (o atributos de último archivo) mostrados en la siguiente tabla. Las fechas y las horas de estos archivos se muestran en hora universal coordinada (UTC). La información de los archivos se convertirá a la hora local cuando la vea. Para averiguar la diferencia entre hora UTC y la hora local, utilice la ficha zona horaria de la herramienta fecha y hora en el panel de control.
   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    
Nota Debido a la interdependencia entre archivos, el más reciente revisión o característica que contiene estos archivos quizás contenga también archivos adicionales.

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:". Este problema se corrigió por primera vez en Pack 4 de Microsoft SQL Server 2000.

Solución

Para evitar este problema, compruebe la conectividad de red y vuelva a enviar el correo. Puede configurar la opción de reintento para el procedimiento almacenado extendido configurando las entradas del registro o al agregar lógica de reintento a su código de aplicación xp_sendmail . Para ello, utilice uno de los métodos siguientes:
  • Método 1: Configurar la opción de reintento para el procedimiento almacenado extendido xp_sendmail

    De forma predeterminada, después de instalar esta revisión, si el xp_sendmail extiende el procedimiento almacenado detecta HRESULT = 0 x 80040115 , el procedimiento almacenado extendido xp_sendmail intenta enviar el correo de nuevo después de que suspende para 1000 milisegundos. Sin embargo, puede configurar el número de reintentos y el intervalo de espera para cada reintento.

    importante Esta sección, el método o la tarea contiene pasos que indican cómo modificar el registro. Sin embargo, pueden producirse problemas graves si modifica incorrectamente el registro. Por tanto, asegúrese de que siga estos pasos cuidadosamente. Realice una para agregar protección, copia de seguridad del registro antes de modificarlo. A continuación, puede restaurar el registro si se produce un problema. Para obtener más información acerca de cómo realizar una copia de seguridad y restaurar el registro, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
    322756Cómo realizar una copia de seguridad y restaurar el registro de Windows
    1. Para configurar el número de reintentos, agregue el valor DWORD NumberOfTimesToRetryOnNetworkError a la siguiente clave del registro y, a continuación, establezca el valor:
      • Para una instancia predeterminada de SQL Server 2000, utilice el HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer clave del registro.
      • Para una instancia con nombre de SQL Server 2000, utilice el HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\ Instance Name \MSSQLServer clave.
    2. Para configurar el intervalo de espera para la opción de reintento de xp_sendmail , agregue el valor DWORD WaitIntervalForRetryOnNetworkError a la siguiente clave del registro y, a continuación, establezca el valor:
      • Para una instancia predeterminada de SQL Server 2000, utilice la clave de registro HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer.
      • Para una instancia con nombre de SQL Server 2000, utilice la clave de registro de \MSSQLServer HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\ Instance Name.
  • Método 2: Agregar Reintentar lógica para el código de aplicación

    Para ello, siga estos pasos:
    1. Compruebe la conectividad red para el equipo está configurado como el servidor de correo.
    2. Asegúrese de que el adaptador de red y el controlador correspondiente funciona correctamente.
    3. Utilizar una lógica apropiada en la secuencia de comandos Transact-SQL que se utiliza para enviar mensajes de correo electrónico utilizando el xp_sendmail procedimiento almacenado extendido para que se puede volver a enviar el mensaje de correo electrónico después de producirse el error. Para ello, puede utilizar una secuencia de comandos Transact-SQL que es similar al siguiente:
      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

Más información

Cuando se envía un mensaje de correo electrónico mediante el xp_sendmail el procedimiento almacenado extendido, el xp_sendmail ampliado procedimiento almacenado realiza muchas llamadas a la API de MAPI. Sin embargo, para una única llamada que causó el error con el siguiente mensaje de error sólo se agrega la opción retry en este hotfix:
HRESULT = 0 X 80040115

Referencias

Para obtener más información acerca de la terminología relativa de la actualización de software, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
824684Descripción de la terminología estándar utilizada para describir las actualizaciones de software de Microsoft
Para obtener más información, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
263556Cómo configurar SQL Mail
315886Problemas comunes de SQL Mail
820220se produce un error 0 x 80070005 o 0x80040005 al enviar correo electrónico utilizando el procedimiento almacenado extendido xp_sendmail

Propiedades

Id. de artículo: 833045 - Última revisión: viernes, 2 de noviembre de 2007 - Versión: 4.3
La información de este artículo se refiere a:
  • Microsoft SQL Server 2000 Desktop Engine (MSDE) SP2
  • Microsoft SQL Server 2000 Desktop Engine (MSDE) SP3
  • Service Pack 2 de Microsoft SQL Server 2000
  • Service Pack 3 de Microsoft SQL Server 2000
  • Service Pack 2 de Microsoft SQL Server 2000
  • Service Pack 3 de Microsoft SQL Server 2000
  • Service Pack 2 de Microsoft SQL Server 2000
  • Microsoft SQL Server 2000 Personal Edition Service Pack 3
  • Service Pack 2 de Microsoft SQL Server 2000
  • Service Pack 3 de Microsoft SQL Server 2000
Palabras clave: 
kbmt kbhotfixserver kbqfe kbregistry kbsqlserv2000presp4fix kbfix kbbug kbemail kbdll kbprb kberrmsg kbsqlservmail KB833045 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 833045

Enviar comentarios

 

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