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:
- Endast fel.
- Fel, varningar och informationsmeddelanden (standard).
- 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 | +--------------+--------------+------------------------------------------------------------------------------+