sql >> Databasteknik >  >> RDS >> Sqlserver

Ta reda på varför ett e-postmeddelande inte kunde skickas i SQL Server (T-SQL)

Om du försöker skicka e-post med Database Mail i SQL Server, men det misslyckas med att skicka, kan du kontrollera sysmail_event_log se varför det misslyckades.

sysmail_event_log view returnerar en rad för varje Windows- eller SQL Server-meddelande som returneras av Database Mail-systemet. Med "meddelande" menar jag inte själva e-postmeddelandet. Jag menar ett meddelande som felmeddelandet som förklarar varför e-postmeddelandet misslyckades.

Du kan också använda sysmail_configure_sp lagrad procedur för att avgöra vilka typer av meddelanden som loggas.

Exempel

Här är ett exempel för att visa hur man använder sysmail_event_log för att returnera alla meddelanden.

SELECT * FROM msdb.dbo.sysmail_event_log;

På mitt system returnerar detta för mycket data för att visa här, men här är det igen för att visa ett meddelande som har returnerats.

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

Resultat (med vertikal utdata):

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

Jag använde vertikal utdata i det här exemplet så att du inte behöver rulla i sidled.

Kontrollera din loggningsnivå

Du kan använda sysmail_help_configure_sp lagrad procedur för att kontrollera vilka typer av meddelanden som loggas.

Exempel:

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 mitt fall är LoggingLevel är 2 , vilket är standardvärdet. Den här inställningen loggar fel, varningar och informationsmeddelanden.

Ändra din loggningsnivå

Du kan använda sysmail_configure_sp lagrad procedur för att ändra din loggningsnivå.

Specifikt kan du välja en LoggingLevel av 1 , 2 eller 3 .

Dessa loggar följande:

  1. Endast fel.
  2. Fel, varningar och informationsmeddelanden (standard).
  3. Fel, varningar, informationsmeddelanden, framgångsmeddelanden och ytterligare interna meddelanden.

Om du felsöker ett problem kanske du tillfälligt vill ändra din loggningsnivå till 3.

Här är ett exempel på hur du ändrar loggningsnivån till 3 .

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

Efter att ha kört det kan jag kontrollera min LoggingLevel igen med sysmail_help_configure_sp lagrad procedur.

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. Skala anslutningar i PostgreSQL med Connection Pooling

  2. Okänd kolumn i var klausul

  3. Kan jag få namn på alla tabeller i SQL Server-databasen i C#-applikationen?

  4. Dela en sträng och gå igenom värden i MySql Procedure