Compartir a través de


Pasos generales para solucionar problemas del Correo electrónico de base de datos

Se aplica a:SQL ServerAzure SQL Managed Instance

La solución de problemas del Correo electrónico de base de datos implica la comprobación de las siguientes áreas generales del sistema del Correo electrónico de base de datos. Estos procedimientos se presentan en un orden lógico, pero se pueden evaluar en cualquier orden.

Permisos

Debe ser miembro del rol fijo de servidor sysadmin para solucionar problemas de todos los aspectos del Correo electrónico de base de datos. Los usuarios que no son miembros del rol fijo de servidor sysadmin solo pueden obtener información sobre los correos electrónicos que intentan enviar, no sobre los correos electrónicos enviados por otros usuarios.

¿Está habilitado el Correo electrónico de base de datos?

  1. En SQL Server Management Studio, conéctese a una instancia de SQL Server mediante una ventana del editor de consultas y, a continuación, ejecute el código siguiente:

    sp_configure 'show advanced', 1; 
    GO
    RECONFIGURE;
    GO
    sp_configure;
    GO
    

    En el panel de resultados, confirme que la opción de configuración para run_value está establecida en .

    Si run_value no es 1, no está habilitado el Correo Electrónico de Base de Datos.

    El Correo electrónico de base de datos no se habilita automáticamente para reducir el número de características disponibles en caso de ataque por parte de un usuario malintencionado. Para obtener más información, consulte Configuración del área expuesta.

  2. Si decide que es adecuado habilitar el Correo electrónico de base de datos, ejecute el código siguiente:

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

    Para restaurar el sp_configure procedimiento a su estado predeterminado, que no muestra opciones avanzadas, ejecute el código siguiente:

    sp_configure 'show advanced', 0; 
    GO
    RECONFIGURE;
    GO
    

¿Están correctamente configurados los usuarios para enviar correo?

  1. Para enviar Correo electrónico de base de datos, los usuarios deben ser miembros del rol de base de datos DatabaseMailUserRole en la base de datos msdb. Los miembros del rol fijo de servidor sysadmin y del rol msdb son automáticamente miembros del rol DatabaseMailUserRole. Para obtener una lista de todos los demás miembros de DatabaseMailUserRole, ejecute la instrucción siguiente:

    EXEC msdb.sys.sp_helprolemember 'DatabaseMailUserRole';
    
  2. Para agregar usuarios al rol DatabaseMailUserRole, utilice la instrucción siguiente:

    USE msdb;
    GO
    
    sp_addrolemember @rolename = 'DatabaseMailUserRole'
    ,@membername = '<database user>';
    
  3. Para enviar mensajes del Correo electrónico de base de datos, los usuarios deben tener acceso al menos a un perfil del Correo electrónico de base de datos. Para obtener una lista de los usuarios (entidades de seguridad) y los perfiles a los que tienen acceso, ejecute la instrucción que se indica a continuación.

    EXEC msdb.dbo.sysmail_help_principalprofile_sp;
    
  4. Use el Asistente para configuración de Correo electrónico de base de datos para crear perfiles y conceder acceso a los perfiles a los usuarios.

¿Se ha iniciado el Correo electrónico de base de datos?

El Programa externo Correo electrónico de base de datos se activa cuando hay mensajes de correo electrónico que deben procesarse. El programa termina cuando ya no hay mensajes para enviar durante el período de tiempo de espera especificado.

  1. Para confirmar que se ha iniciado la activación del Correo electrónico de base de datos, ejecute la siguiente instrucción:

    EXEC msdb.dbo.sysmail_help_status_sp;
    
  2. Si no se ha iniciado la activación del Correo electrónico de base de datos, ejecute la instrucción que se indica a continuación:

    EXEC msdb.dbo.sysmail_start_sp;
    
  3. Si se ha iniciado el programa externo del Correo electrónico de base de datos, compruebe el estado de la cola de correo electrónico con la instrucción siguiente:

    EXEC msdb.dbo.sysmail_help_queue_sp @queue_type = 'mail';
    

    La cola de correo debe tener el estado RECEIVES_OCCURRING. La cola de estado puede variar de un momento a otro. Si el estado de la cola de correo no es RECEIVES_OCCURRING, pruebe a reiniciar la cola. Detenga la cola con la siguiente instrucción:

    EXEC msdb.dbo.sysmail_stop_sp;
    

    Luego, iníciela con la siguiente instrucción:

    EXEC msdb.dbo.sysmail_start_sp;
    

    Nota:

    Use la length columna del conjunto de resultados de sysmail_help_queue_sp para determinar el número de correos electrónicos en la cola de correo.

¿Hay problemas que afecten a algunas (o a todas) las cuentas?

Si ha determinado que algunos pero no todos los perfiles pueden enviar correo electrónico, es posible que tenga problemas con las cuentas de Correo electrónico de base de datos usadas por los perfiles de problema.

  1. Para determinar qué cuentas envían correo correctamente, ejecute la instrucción siguiente:

    SELECT sent_account_id, sent_date FROM msdb.dbo.sysmail_sentitems;
    
  2. Si un perfil que no funciona no utiliza ninguna de las cuentas indicadas, es posible que todas las cuentas disponibles para el perfil no funcionen correctamente. Para probar cuentas individuales, utilice el Asistente para configuración de Correo electrónico de base de datos para crear un nuevo perfil con una sola cuenta y, a continuación, utilice el cuadro de diálogo Enviar correo electrónico de prueba para enviar correo con la nueva cuenta.

  3. Para ver los mensajes de error devueltos por el Correo electrónico de base de datos, ejecute la instrucción siguiente:

    SELECT * FROM msdb.dbo.sysmail_event_log;
    

    Nota:

    El Correo electrónico de base de datos considera que se ha enviado un mensaje cuando se ha entregado correctamente a un servidor de correo SMTP. La aparición de errores posteriores, como una dirección de correo electrónico de destinatario no válida, puede impedir que se entregue el mensaje, pero no constarán en el registro del Correo electrónico de base de datos.

Reintentar la entrega de correo

  1. Si ha determinado que Database Mail falla porque el servidor SMTP no se puede alcanzar de forma confiable, podría aumentar la tasa de éxito de entrega de correo incrementando el número de intentos que realiza Database Mail para enviar cada mensaje. Inicie el Asistente para configuración de Correo electrónico de base de datos y seleccione la opción Ver o cambiar parámetros del sistema. Como alternativa, puede asociar más cuentas al perfil de modo que, en caso de conmutación por error de la cuenta principal, el Correo electrónico de base de datos utilice la cuenta de conmutación por error para enviar mensajes de correo electrónico.

  2. En la página Configurar parámetros del sistema, los valores predeterminados de cinco veces para Número de reintentos de cuenta y de 60 segundos para Intervalo entre reintentos de cuenta significan que la entrega de mensajes provocará un error si no se puede alcanzar el servidor SMTP en 5 minutos. Aumente los valores de estos parámetros para aumentar el tiempo tras el cual la entrega de mensajes provoca un error.

    Nota:

    Cuando se envían grandes cantidades de mensajes, los valores predeterminados de gran tamaño pueden aumentar la confiabilidad, pero aumentarán considerablemente el uso de recursos, ya que se intenta entregar varios mensajes de nuevo y más. Para tratar el problema de origen, resuelva el problema de red o de servidor SMTP que impide al Correo electrónico de base de datos ponerse en contacto con el servidor SMTP inmediatamente.

Verifique que el service broker esté habilitado para msdb

El correo electrónico de base de datos requiere que Service Broker esté habilitado para la base de datos msdb. Compruebe si service broker está habilitado con msdb el siguiente script de T-SQL:

SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb' ; -- should be 1

Si no está habilitado, debe habilitarse el Service Broker. Sin embargo, el siguiente script de ejemplo requiere acceso exclusivo a las bases de datos del msdb sistema, por lo que es posible que esto no sea factible para ejecutarse durante las horas comerciales típicas. Para más información, consulte ALTER DATABASE ... SET ENABLE_BROKER.

ALTER DATABASE msdb SET ENABLE_BROKER;