Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Finden Sie heraus, warum eine E-Mail in SQL Server (T-SQL) nicht gesendet werden konnte

Wenn Sie versuchen, E-Mails mithilfe von Datenbank-E-Mail in SQL Server zu senden, der Versand jedoch fehlschlägt, können Sie das sysmail_event_log überprüfen um zu sehen, warum es fehlgeschlagen ist.

Das sysmail_event_log view gibt eine Zeile für jede vom Datenbank-E-Mail-System zurückgegebene Windows- oder SQL Server-Nachricht zurück. Mit „Nachricht“ meine ich nicht die eigentliche E-Mail-Nachricht. Ich meine eine Nachricht wie die Fehlermeldung, die erklärt, warum die E-Mail fehlgeschlagen ist.

Sie können auch sysmail_configure_sp verwenden gespeicherte Prozedur, um zu bestimmen, welche Arten von Nachrichten protokolliert werden.

Beispiel

Hier ist ein Beispiel, um zu demonstrieren, wie man sysmail_event_log verwendet um alle Nachrichten zurückzugeben.

SELECT * FROM msdb.dbo.sysmail_event_log;

Auf meinem System gibt dies zu viele Daten zurück, um sie hier anzuzeigen, aber hier soll noch einmal eine Nachricht angezeigt werden, die zurückgegeben wird.

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

Ergebnis (bei vertikaler Ausgabe):

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

Ich habe in diesem Beispiel eine vertikale Ausgabe verwendet, damit Sie nicht seitwärts scrollen müssen.

Überprüfen Sie Ihre Protokollierungsebene

Sie können den sysmail_help_configure_sp verwenden gespeicherte Prozedur, um zu prüfen, welche Arten von Nachrichten protokolliert werden.

Beispiel:

EXEC msdb.dbo.sysmail_help_configure_sp 
    @parameter_name = LoggingLevel;

Ergebnis:

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

In meinem Fall der LoggingLevel ist 2 , was der Standardwert ist. Diese Einstellung protokolliert Fehler, Warnungen und Informationsmeldungen.

Ändern Sie Ihre Protokollierungsstufe

Sie können den sysmail_configure_sp verwenden gespeicherte Prozedur, um Ihre Protokollebene zu ändern.

Insbesondere können Sie einen LoggingLevel auswählen von 1 , 2 , oder 3 .

Diese protokollieren Folgendes:

  1. Nur Fehler.
  2. Fehler, Warnungen und Informationsmeldungen (Standard).
  3. Fehler, Warnungen, Informationsmeldungen, Erfolgsmeldungen und zusätzliche interne Meldungen.

Wenn Sie ein Problem beheben, möchten Sie möglicherweise Ihre Protokollebene vorübergehend auf 3 ändern.

Hier ist ein Beispiel für die Änderung der Protokollierungsebene auf 3 .

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

Nachdem ich das ausgeführt habe, kann ich mein LoggingLevel überprüfen wieder mit dem sysmail_help_configure_sp gespeicherte Prozedur.

EXEC msdb.dbo.sysmail_help_configure_sp 
    @parameter_name = LoggingLevel;

Ergebnis:

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