sql >> Database >  >> RDS >> Sqlserver

Ontdek waarom een ​​e-mail niet kon worden verzonden in SQL Server (T-SQL)

Als u e-mail probeert te verzenden met Database Mail in SQL Server, maar het verzenden niet lukt, kunt u de sysmail_event_log controleren bekijken om te zien waarom het is mislukt.

De sysmail_event_log view retourneert één rij voor elk Windows- of SQL Server-bericht dat wordt geretourneerd door het Database Mail-systeem. Met "bericht" bedoel ik niet het eigenlijke e-mailbericht. Ik bedoel een bericht zoals het foutbericht waarin wordt uitgelegd waarom de e-mail is mislukt.

U kunt ook de sysmail_configure_sp . gebruiken opgeslagen procedure om te bepalen welke soorten berichten worden gelogd.

Voorbeeld

Hier is een voorbeeld om te demonstreren hoe sysmail_event_log te gebruiken om alle berichten terug te sturen.

SELECT * FROM msdb.dbo.sysmail_event_log;

Op mijn systeem retourneert dit te veel gegevens om hier weer te geven, maar hier is het opnieuw om één bericht weer te geven dat wordt geretourneerd.

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

Resultaat (met verticale uitvoer):

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

In dit voorbeeld heb ik verticale uitvoer gebruikt, zodat je niet zijwaarts hoeft te scrollen.

Controleer uw registratieniveau

U kunt de sysmail_help_configure_sp . gebruiken opgeslagen procedure om te controleren welke soorten berichten zijn gelogd.

Voorbeeld:

EXEC msdb.dbo.sysmail_help_configure_sp 
    @parameter_name = LoggingLevel;

Resultaat:

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

In mijn geval is het LoggingLevel is 2 , wat de standaardwaarde is. Deze instelling registreert fouten, waarschuwingen en informatieve berichten.

Uw logniveau wijzigen

U kunt de sysmail_configure_sp . gebruiken opgeslagen procedure om uw logniveau te wijzigen.

U kunt specifiek een LoggingLevel . kiezen van 1 , 2 , of 3 .

Deze loggen het volgende:

  1. Alleen fouten.
  2. Fouten, waarschuwingen en informatieve berichten (standaard).
  3. Fouten, waarschuwingen, informatieve berichten, succesberichten en aanvullende interne berichten.

Als je een probleem oplost, wil je misschien je logniveau tijdelijk wijzigen in 3.

Hier is een voorbeeld van het wijzigen van het logboekniveau naar 3 .

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

Nadat ik dat heb uitgevoerd, kan ik mijn LoggingLevel . controleren opnieuw met de sysmail_help_configure_sp opgeslagen procedure.

EXEC msdb.dbo.sysmail_help_configure_sp 
    @parameter_name = LoggingLevel;

Resultaat:

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

  1. Wat is het equivalent van de Oracle Dual-tabel in MS SqlServer?

  2. Gegevens importeren in een MySQL-database

  3. Roep een opgeslagen procedure aan met een andere in Oracle

  4. Star Trek 3D-schaakgegevensmodel