Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Scopri perché un'e-mail non è riuscita a inviare in SQL Server (T-SQL)

Se stai tentando di inviare e-mail utilizzando Posta database in SQL Server, ma l'invio non riesce, puoi controllare il sysmail_event_log visualizza per vedere il motivo per cui non è riuscito.

Il sysmail_event_log view restituisce una riga per ogni messaggio di Windows o SQL Server restituito dal sistema di posta elettronica database. Per "messaggio", non intendo il messaggio di posta effettivo. Intendo un messaggio come il messaggio di errore che spiega perché la posta non è riuscita.

Puoi anche usare sysmail_configure_sp stored procedure per determinare quali tipi di messaggi vengono registrati.

Esempio

Ecco un esempio per dimostrare come utilizzare sysmail_event_log per restituire tutti i messaggi.

SELECT * FROM msdb.dbo.sysmail_event_log;

Sul mio sistema questo restituisce troppi dati da mostrare qui, ma qui è di nuovo per mostrare un messaggio che è stato restituito.

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

Risultato (usando l'output verticale):

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

Ho usato l'output verticale in questo esempio in modo da non dover scorrere lateralmente.

Verifica il tuo livello di registrazione

Puoi usare il sysmail_help_configure_sp stored procedure per verificare quali tipi di messaggi vengono registrati.

Esempio:

EXEC msdb.dbo.sysmail_help_configure_sp 
    @parameter_name = LoggingLevel;

Risultato:

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

Nel mio caso, il LoggingLevel è 2 , che è il valore predefinito. Questa impostazione registra errori, avvisi e messaggi informativi.

Modifica il tuo livello di registrazione

Puoi usare il sysmail_configure_sp stored procedure per modificare il livello di registrazione.

In particolare, puoi scegliere un LoggingLevel di 1 , 2 o 3 .

Questi registrano quanto segue:

  1. Solo errori.
  2. Errori, avvisi e messaggi informativi (predefinito).
  3. Errori, avvisi, messaggi informativi, messaggi di successo e messaggi interni aggiuntivi.

Se stai risolvendo un problema, potresti voler cambiare temporaneamente il tuo livello di registrazione a 3.

Ecco un esempio di modifica del livello di registrazione in 3 .

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

Dopo averlo eseguito, posso controllare il mio LoggingLevel di nuovo con il sysmail_help_configure_sp procedura memorizzata.

EXEC msdb.dbo.sysmail_help_configure_sp 
    @parameter_name = LoggingLevel;

Risultato:

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