Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Descubra por que um email falhou ao enviar no SQL Server (T-SQL)


Se você estiver tentando enviar e-mail usando o Database Mail no SQL Server, mas não conseguir enviar, verifique o sysmail_event_log view para ver por que falhou.

O sysmail_event_log view retorna uma linha para cada mensagem do Windows ou SQL Server retornada pelo sistema Database Mail. Por “mensagem”, não me refiro à mensagem de correio real. Quero dizer uma mensagem como a mensagem de erro que explica por que o correio falhou.

Você também pode usar o sysmail_configure_sp procedimento armazenado para determinar quais tipos de mensagens são registradas.

Exemplo


Aqui está um exemplo para demonstrar como usar sysmail_event_log para retornar todas as mensagens.
SELECT * FROM msdb.dbo.sysmail_event_log;

No meu sistema, isso retorna muitos dados para mostrar aqui, mas aqui está novamente para mostrar uma mensagem retornada.
SELECT * 
FROM msdb.dbo.sysmail_event_log
WHERE log_id = 2;

Resultado (usando saída 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

Eu usei a saída vertical neste exemplo para que você não precise rolar para os lados.

Verifique seu nível de registro


Você pode usar o sysmail_help_configure_sp procedimento armazenado para verificar quais tipos de mensagens são registradas.

Exemplo:
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 |
+--------------+--------------+------------------------------------------------------------------------------+

No meu caso, o LoggingLevel é 2 , que é o valor padrão. Essa configuração registra erros, avisos e mensagens informativas.

Alterar seu nível de registro


Você pode usar o sysmail_configure_sp procedimento armazenado para alterar seu nível de log.

Especificamente, você pode escolher um LoggingLevel de 1 , 2 , ou 3 .

Estes registram o seguinte:
  1. Somente erros.
  2. Erros, avisos e mensagens informativas (padrão).
  3. Erros, avisos, mensagens informativas, mensagens de sucesso e mensagens internas adicionais.

Se você estiver solucionando um problema, talvez queira alterar temporariamente seu nível de registro para 3.

Aqui está um exemplo de como alterar o nível de registro para 3 .
EXECUTE msdb.dbo.sysmail_configure_sp  
    'LoggingLevel', '3';

Depois de executar isso, posso verificar meu LoggingLevel novamente com o sysmail_help_configure_sp procedimento armazenado.
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 |
+--------------+--------------+------------------------------------------------------------------------------+