2013-02-01 12 views
25

Szukam sposobu na sprawdzenie, czy konkretne wiadomości e-mail w kolejce za pomocą sp_send_dbmail są pomyślnie przesłane z naszego serwera Exchange. Przyjrzałem się tabelom systemowym msdb.dbo.sysmail_mailitems i msdb.dbo.sysmail_log. msdb.dbo.sysmail_log wydaje się być bardziej pomocny z tych dwóch; konkretnie, jego kolumna description. Z badań przeprowadzonych mam tak daleko, jak się wydaje, gdy wystąpi błąd, pojawi się komunikat w następującym formacie w kolumnie description:Sprawdź, czy sp_send_dbmail zakończyło się pomyślnie

wiadomość nie mogła zostać wysłana do odbiorców ze względu na serwerze pocztowym niepowodzenie. (Wysyłanie wiadomości e-mail przy użyciu konta 3 (2012-11-01T11: 28: 04) Wiadomość wyjątku: Nie można wysyłać wiadomości e-mail na serwer pocztowy. (Skrzynka pocztowa jest niedostępna Odpowiedź serwera: 5.7.1 Nie można przekazać dla wiadomości thisemail @ email .com).)

Jest to dołączone do innych wierszy, które mają ten sam process_id. Opis do ewidencji załączając są

proces DatabaseMail rozpoczyna

i

proces DatabaseMail jest zamykany

Jeśli e-mail została wysłana, te same 2 rzędy są zapisywane w tabeli, z wyjątkiem bez zamkniętych rzędów między nimi.

Więc jeśli mam udane send dodaje pojawi się w tabeli

enter image description here

i jeśli mam awarię wysyłać zapisy w logu to

enter image description here

Are tam inne przypadki rejestrowania wpisów, jeśli wysłanie się nie powiodło lub czy wysłanie się powiodło? Na przykład, czy jest możliwe, że istnieją 4 wiersze wpisów dla wysyłania (2 załączające stwierdzenie, kiedy zostało uruchomione i kiedy zostało zamknięte, i 2 załączone, stwierdzające, że wiadomość e-mail została wysłana pomyślnie). Nie znalazłem żadnych zapisów dziennika, które odbiegały od wzorca powyżej, ale chciałbym mieć pewność, zanim napiszę logikę na podstawie tego założenia.

Odpowiedz

22

sysmail_faileditems spowoduje wyświetlenie tylko listy nieudanych wiadomości e-mail. Jeśli chcesz wyświetlić listę udanych wiadomości e-mail, musisz użyć numeru sysmail_mailitems.

Użyj poniższego zapytania, aby uzyskać szczegółowe informacje na wszystkie e-maile wysyłane tą samą datę:

SELECT * FROM msdb..sysmail_mailitems WHERE sent_date > DATEADD(DAY, -1,GETDATE()) 

A oto pełna kwerendy, aby uzyskać wszystkie nieudanej wiadomości z ostatnich 24 godzin:

SELECT items.subject , 
     items.recipients , 
     items.copy_recipients , 
     items.blind_copy_recipients , 
     items.last_mod_date , 
     l.description 
FROM msdb.dbo.sysmail_faileditems AS items 
     LEFT OUTER JOIN msdb.dbo.sysmail_event_log AS l 
        ON items.mailitem_id = l.mailitem_id 
WHERE items.last_mod_date > DATEADD(DAY, -1,GETDATE()) 
Powiązane problemy