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

Find ud af, hvorfor en e-mail ikke kunne sendes i SQL Server (T-SQL)

Hvis du prøver at sende e-mail ved hjælp af Database Mail i SQL Server, men det mislykkes at sende, kan du tjekke sysmail_event_log se, hvorfor det mislykkedes.

sysmail_event_log view returnerer én række for hver Windows- eller SQL Server-meddelelse, der returneres af Database Mail-systemet. Med "besked" mener jeg ikke selve mailbeskeden. Jeg mener en meddelelse såsom fejlmeddelelsen, der forklarer, hvorfor e-mailen mislykkedes.

Du kan også bruge sysmail_configure_sp lagret procedure for at bestemme, hvilke typer meddelelser der logges.

Eksempel

Her er et eksempel til at demonstrere, hvordan man bruger sysmail_event_log for at returnere alle beskeder.

SELECT * FROM msdb.dbo.sysmail_event_log;

På mit system returnerer dette for mange data til at blive vist her, men her er det igen for at vise én besked, der er returneret.

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

Resultat (ved hjælp af lodret output):

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

Jeg brugte lodret output i dette eksempel, så du ikke behøver at rulle sidelæns.

Tjek dit logføringsniveau

Du kan bruge sysmail_help_configure_sp gemt procedure for at kontrollere, hvilke typer meddelelser der er logget.

Eksempel:

EXEC msdb.dbo.sysmail_help_configure_sp 
    @parameter_name = LoggingLevel;

Resultat:

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

I mit tilfælde er LoggingLevel er 2 , som er standardværdien. Denne indstilling logger fejl, advarsler og informationsmeddelelser.

Skift dit logføringsniveau

Du kan bruge sysmail_configure_sp gemt procedure for at ændre dit logningsniveau.

Specifikt kan du vælge et LoggingLevel af 1 , 2 eller 3 .

Disse logger følgende:

  1. Kun fejl.
  2. Fejl, advarsler og informationsmeddelelser (standard).
  3. Fejl, advarsler, informationsmeddelelser, succesmeddelelser og yderligere interne meddelelser.

Hvis du fejlfinder et problem, vil du måske midlertidigt ændre dit logningsniveau til 3.

Her er et eksempel på ændring af logningsniveauet til 3 .

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

Efter at have kørt det, kan jeg tjekke mit LoggingLevel igen med sysmail_help_configure_sp gemt procedure.

EXEC msdb.dbo.sysmail_help_configure_sp 
    @parameter_name = LoggingLevel;

Resultat:

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

  1. Oracle dato

  2. SYSTIMESTAMP Funktion i Oracle

  3. Pil notation

  4. Gruppér efter måned og år i MySQL