2013-02-01 21 views
25

Sto cercando un modo per verificare se una particolare e-mail in coda utilizzando sp_send_dbmail viene infine inviata correttamente dal nostro server di Exchange. Ho esaminato le tabelle di sistema msdb.dbo.sysmail_mailitems e msdb.dbo.sysmail_log. msdb.dbo.sysmail_log sembra essere il più utile dei due; in particolare, la sua colonna description. Dai test che abbiamo condotto finora, sembra che ogni volta che si verifica un errore, un messaggio nel seguente formato viene visualizzato nella colonna description:Verifica se sp_send_dbmail ha avuto esito positivo

La posta non potrebbe essere inviato ai destinatari a causa del server di posta fallimento. (Invio di posta utilizzando l'Account 3 (2012-11-01T11: 28: 04). Messaggio di eccezione: Impossibile inviare email al server di posta (la casella di posta non disponibile. La risposta del server era: 5.7.1 Impossibile inoltrare per thisemail @ email .com).)

Questo è incluso con altre righe che condividono lo stesso process_id. La descrizione per i record che racchiudono sono

processo DatabaseMail viene avviato

e

processo DatabaseMail si sta spegnendo

Se un messaggio e-mail è stata inviata con successo, le stesse 2 righe sono registrate nella tabella, tranne che senza righe racchiuse tra loro.

Quindi, se ho un invio di successo, appare il seguente nella tabella

enter image description here

e se ho un fallimento di invio, i record di log questo

enter image description here

sono lì altre istanze di come le voci possono essere registrate se una mandata è fallita o se una mandata è andata a buon fine? Ad esempio, potrebbe essere possibile che ci siano 4 righe di voci per una mandata (2 allegando affermando quando è stato avviato e quando è stato chiuso, e 2 allegata affermando che l'e-mail è stata inviata con successo). Non ho trovato record di log che si sono allontanati dal pattern sopra elencato, ma vorrei essere sicuro prima di scrivere una logica basata su questa ipotesi.

risposta

22

sysmail_faileditems otterrà solo l'elenco di e-mail non riuscite. Se è necessario visualizzare un elenco di e-mail di successo, è necessario utilizzare sysmail_mailitems.

Utilizzare la query qui sotto per ottenere i dettagli per tutti i messaggi di posta elettronica inviati nella stessa data:

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

Ed ecco la domanda completa per ottenere tutte le email falliti dalle ultime 24 ore:

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()) 
Problemi correlati