2013-02-01 36 views
25

Ich bin auf der Suche nach einer Möglichkeit zu überprüfen, ob eine bestimmte E-Mails in der Warteschlange sp_send_dbmail erfolgreich von unserem Exchange-Server gesendet wurden. Ich habe mir die Systemtabellen msdb.dbo.sysmail_mailitems und msdb.dbo.sysmail_log angeschaut. msdb.dbo.sysmail_log scheint der hilfreichere der beiden zu sein; speziell seine description Spalte. Aus den Tests, die ich bisher geführt habe, so scheint es, wenn ein Fehler auftritt, wird eine Meldung im folgende Format in den description Spalt angezeigt: wegen des Mail-Servers Überprüfen, ob sp_send_dbmail erfolgreich war

Die E-Mail nicht an den Empfänger gesendet werden kann Fehler. (Versenden von E-Mail mit Konto 3 (2012-11-01T11: 28: 04). Ausnahmebedingungsnachricht: Es können keine E-Mails an den Mailserver gesendet werden. (Mailbox nicht verfügbar. Die Antwort des Servers war: 5.7.1 Weiterleitung für thisemail @ email .com).)

Dies ist mit anderen Zeilen, die die gleichen process_id teilen. Die Beschreibung für die umschließenden Aufzeichnungen sind

DatabaseMail Prozess

gestartet

und

DatabaseMail Prozess wird heruntergefahren

Wenn eine E-Mail erfolgreich gesendet wurde, Die gleichen 2 Zeilen werden in der Tabelle aufgezeichnet, außer dass zwischen ihnen keine Zeilen eingeschlossen sind.

Also, wenn ich einen erfolgreichen Sende haben, erscheint die folgende in der Tabelle

enter image description here

und wenn ich einen Sendefehler, die Protokolldatensätze dieses

enter image description here

Existieren andere Beispiele dafür, wie die Einträge protokolliert werden können, wenn ein Sendevorgang fehlgeschlagen ist oder ein Sendevorgang erfolgreich war? Zum Beispiel könnte es möglich sein, dass es 4 Zeilen mit Einträgen für einen Sendevorgang gibt (2 umschließende Angaben, wenn es gestartet wurde und wenn es heruntergefahren wurde, und 2 beigefügt, die die E-Mail erfolgreich gesendet haben). Ich habe keine Protokolldatensätze gefunden, die von dem oben aufgeführten Muster abweichen, möchte aber sicher sein, bevor ich basierend auf dieser Annahme eine Logik schreibe.

Antwort

22

sysmail_faileditems erhalten Sie nur die Liste der fehlgeschlagenen E-Mails. Wenn Sie eine Liste der erfolgreichen E-Mails sehen möchten, müssen Sie sysmail_mailitems verwenden.

Verwenden Sie die folgenden Abfrage zu erhalten Details für alle E-Mails mit dem gleichen Datum gesendet:

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

Und hier ist die komplette Abfrage alle failed E-Mails aus den letzten 24 Stunden zu erhalten:

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()) 
Verwandte Themen