Compartir a través de


Errores comunes del Correo electrónico de base de datos

Se aplica a:SQL ServerAzure SQL Managed Instance

En este artículo se describen algunos errores comunes detectados en el Correo electrónico de base de datos y las formas de resolverlos.

Para ejecutar comandos T-SQL en la instancia de SQL Server, use SQL Server Management Studio (SSMS), la extensión MSSQL para Visual Studio Code, sqlcmd o la herramienta de consulta T-SQL favorita.

No se encontró el procedimiento almacenado 'sp_send_dbmail'

El sp_send_dbmail procedimiento almacenado se instala en la msdb base de datos. Debe ejecutar sp_send_dbmail desde la base de datos msdb, o especificar un nombre de tres partes para el procedimiento almacenado.

Ejemplo:

EXEC msdb.dbo.sp_send_dbmail ...

O:

USE msdb;
GO
EXEC dbo.sp_send_dbmail ...

Use Configurar correo electrónico de base de datos para habilitar y configurar el correo electrónico de base de datos.

Perfil no válido

Este mensaje tiene dos causas posibles: El perfil especificado no existe o el usuario que ejecuta sp_send_dbmail (Transact-SQL) no tiene permiso para tener acceso al perfil.

Para comprobar los permisos de un perfil, ejecute el procedimiento almacenado sysmail_help_principalprofile_sp (Transact-SQL) con el nombre del perfil. Use el procedimiento almacenado sysmail_add_principalprofile_sp (Transact-SQL) o configure el correo electrónico de base de datos para conceder permiso a un msdb usuario o grupo para acceder a un perfil.

Permiso denegado para sp_send_dbmail

En este artículo se describe cómo solucionar un mensaje de error que indica que el usuario que intenta enviar correo electrónico de base de datos no tiene permiso para ejecutar sp_send_dbmail

El texto del mensaje de error es el siguiente:

EXECUTE permission denied on object 'sp_send_dbmail', 
database 'msdb', schema 'dbo'.

Para enviar correo electrónico de base de datos, los usuarios deben estar registrados en la base de datos msdb y ser miembro del rol de base de datos "DatabaseMailUserRole" en la base de datos msdb. Para agregar usuarios o grupos de msdb a este rol, utilice SQL Server Management Studio o ejecute la instrucción que se indica a continuación para el usuario o el rol que necesita enviar mensajes del Correo electrónico de base de datos.

EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole'
    ,@membername = '<user or role name>';
GO

Para obtener más información, vea sp_addrolemember y sp_droprolemember.

Correo electrónico de base de datos en cola, sin entradas en sysmail_event_log o en el registro de eventos de aplicación Windows

El Correo electrónico de base de datos depende de Service Broker para poner en cola los mensajes de correo electrónico. Si se detiene el Correo de base de datos o si no se activa la entrega de mensajes de Service Broker en la base de datos msdb, el Correo de base de datos pone en cola los mensajes en la base de datos, pero no puede entregarlos. En ese caso, los mensajes de Service Broker permanecen en la cola del correo de Service Broker. Service Broker no activa el programa externo, por lo que no hay entradas de registro en sysmail_event_log y ninguna actualización del estado del elemento en sysmail_allitems y las vistas relacionadas.

Ejecute la siguiente instrucción para comprobar si Service Broker está habilitado en la msdb base de datos:

SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb';

Un valor de 0 indica que la entrega de mensajes de Service Broker no está activada en la msdb base de datos. Para corregir el problema, active Service Broker en la base de datos con el siguiente comando de Transact-SQL:

USE master ;
GO

ALTER DATABASE msdb SET ENABLE_BROKER ;
GO

El Correo electrónico de base de datos se basa en una serie de procedimientos almacenados internos. Para reducir el área expuesta, los procedimientos almacenados están deshabilitados en una nueva instalación de SQL Server. Para habilitar estos procedimientos almacenados, utilice las XPs de correo de base de datos (opción de configuración del servidor) del procedimiento almacenado del sistema, como se muestra en el siguiente ejemplo:

EXEC sp_configure 'show advanced options', 1;  
RECONFIGURE;
EXEC sp_configure 'Database Mail XPs', 1;  
RECONFIGURE;
EXEC sp_configure 'show advanced options', 0;
RECONFIGURE;
GO  

Es posible que Correo Electrónico de Base de Datos se haya detenido en la base de datos msdb. Para comprobar el estado del Correo electrónico de base de datos, ejecute la siguiente instrucción:

EXECUTE dbo.sysmail_help_status_sp;

Para iniciar Correo de base de datos en una base de datos de host de correo, ejecute el siguiente comando en la base de datos msdb:

EXECUTE dbo.sysmail_start_sp;

Service Broker examina la duración del diálogo de los mensajes al activarse; por tanto, los mensajes que hayan estado en la cola de transmisión de Service Broker durante más tiempo que el especificado para la duración configurada del diálogo producen un error inmediato. El Correo electrónico de base de datos actualiza el estado de los mensajes con error en sysmail_allitems y las vistas relacionadas. Debe decidir si los mensajes se deben enviar de nuevo. Para obtener más información sobre cómo configurar la duración del cuadro de diálogo que usa Correo electrónico de base de datos, consulte sysmail_configure_sp.

Paso siguiente