sql >> Base de Datos >  >> RDS >> Sqlserver

Averigüe por qué no se pudo enviar un correo electrónico en SQL Server (T-SQL)

Si está intentando enviar un correo electrónico utilizando el correo electrónico de la base de datos en SQL Server, pero no se puede enviar, puede verificar el sysmail_event_log view para ver por qué falló.

El sysmail_event_log view devuelve una fila por cada mensaje de Windows o SQL Server devuelto por el sistema de Correo electrónico de base de datos. Por "mensaje", no me refiero al mensaje de correo real. Me refiero a un mensaje como el mensaje de error que explica por qué falló el correo.

También puede usar el sysmail_configure_sp procedimiento almacenado para determinar qué tipos de mensajes se registran.

Ejemplo

Aquí hay un ejemplo para demostrar cómo usar sysmail_event_log para devolver todos los mensajes.

SELECT * FROM msdb.dbo.sysmail_event_log;

En mi sistema, esto devuelve demasiados datos para mostrar aquí, pero aquí está nuevamente para mostrar un mensaje que se devuelve.

SELECT * 
FROM msdb.dbo.sysmail_event_log
WHERE log_id = 2;

Resultado (usando salida vertical):

log_id        | 2
event_type    | error
log_date      | 2020-08-24 02:40:53.317
description   | The mail could not be sent to the recipients because of the mail server failure. (Sending Mail using Account 1 (2020-08-24T02:40:52). Exception Message: Could not connect to mail server. (No connection could be made because the target machine actively refused it 127.0.0.1:25).)
process_id    | 68
mailitem_id   | 1
account_id    | NULL
last_mod_date | 2020-08-24 02:40:53.317
last_mod_user | sa

Usé la salida vertical en este ejemplo para que no tengas que desplazarte hacia los lados.

Comprueba tu nivel de registro

Puede usar el sysmail_help_configure_sp procedimiento almacenado para comprobar qué tipos de mensajes se registran.

Ejemplo:

EXEC msdb.dbo.sysmail_help_configure_sp 
    @parameter_name = LoggingLevel;

Resultado:

+--------------+--------------+------------------------------------------------------------------------------+
| paramname    | paramvalue   | description                                                                  |
|--------------+--------------+------------------------------------------------------------------------------|
| LoggingLevel | 2            | Database Mail logging level: normal - 1, extended - 2 (default), verbose - 3 |
+--------------+--------------+------------------------------------------------------------------------------+

En mi caso, el LoggingLevel es 2 , que es el valor predeterminado. Esta configuración registra errores, advertencias y mensajes informativos.

Cambie su nivel de registro

Puede usar el sysmail_configure_sp procedimiento almacenado para cambiar su nivel de registro.

Específicamente, puede elegir un LoggingLevel de 1 , 2 , o 3 .

Estos registran lo siguiente:

  1. Solo errores.
  2. Errores, advertencias y mensajes informativos (predeterminado).
  3. Errores, advertencias, mensajes informativos, mensajes de éxito y mensajes internos adicionales.

Si está solucionando un problema, es posible que desee cambiar temporalmente su nivel de registro a 3.

Aquí hay un ejemplo de cómo cambiar el nivel de registro a 3 .

EXECUTE msdb.dbo.sysmail_configure_sp  
    'LoggingLevel', '3';

Después de ejecutar eso, puedo verificar mi LoggingLevel de nuevo con el sysmail_help_configure_sp procedimiento almacenado.

EXEC msdb.dbo.sysmail_help_configure_sp 
    @parameter_name = LoggingLevel;

Resultado:

+--------------+--------------+------------------------------------------------------------------------------+
| paramname    | paramvalue   | description                                                                  |
|--------------+--------------+------------------------------------------------------------------------------|
| LoggingLevel | 3            | Database Mail logging level: normal - 1, extended - 2 (default), verbose - 3 |
+--------------+--------------+------------------------------------------------------------------------------+