Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Découvrez pourquoi un e-mail n'a pas pu être envoyé dans SQL Server (T-SQL)

Si vous essayez d'envoyer un e-mail à l'aide de la messagerie de base de données dans SQL Server, mais que l'envoi échoue, vous pouvez vérifier le sysmail_event_log vue pour voir pourquoi cela a échoué.

Le sysmail_event_log view renvoie une ligne pour chaque message Windows ou SQL Server renvoyé par le système de messagerie de base de données. Par "message", je ne veux pas dire le message réel. Je veux dire un message tel que le message d'erreur qui explique pourquoi le courrier a échoué.

Vous pouvez également utiliser le sysmail_configure_sp procédure stockée pour déterminer quels types de messages sont enregistrés.

Exemple

Voici un exemple pour montrer comment utiliser sysmail_event_log pour renvoyer tous les messages.

SELECT * FROM msdb.dbo.sysmail_event_log;

Sur mon système, cela renvoie trop de données à afficher ici, mais ici, c'est à nouveau pour afficher un message qui est renvoyé.

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

Résultat (en utilisant la sortie 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

J'ai utilisé la sortie verticale dans cet exemple afin que vous n'ayez pas à faire défiler latéralement.

Vérifiez votre niveau de journalisation

Vous pouvez utiliser le sysmail_help_configure_sp procédure stockée pour vérifier quels types de messages sont enregistrés.

Exemple :

EXEC msdb.dbo.sysmail_help_configure_sp 
    @parameter_name = LoggingLevel;

Résultat :

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

Dans mon cas, le LoggingLevel est 2 , qui est la valeur par défaut. Ce paramètre enregistre les erreurs, les avertissements et les messages d'information.

Modifier votre niveau de journalisation

Vous pouvez utiliser le sysmail_configure_sp procédure stockée pour modifier votre niveau de journalisation.

Plus précisément, vous pouvez choisir un LoggingLevel de 1 , 2 , ou 3 .

Ceux-ci enregistrent les éléments suivants :

  1. Erreurs uniquement.
  2. Erreurs, avertissements et messages d'information (par défaut).
  3. Erreurs, avertissements, messages d'information, messages de réussite et messages internes supplémentaires

Si vous résolvez un problème, vous souhaiterez peut-être modifier temporairement votre niveau de journalisation à 3.

Voici un exemple de modification du niveau de journalisation à 3 .

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

Après avoir exécuté cela, je peux vérifier mon LoggingLevel à nouveau avec le sysmail_help_configure_sp procédure stockée.

EXEC msdb.dbo.sysmail_help_configure_sp 
    @parameter_name = LoggingLevel;

Résultat :

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