ver sysmail_allitems sp_send_dbmail queued mail job example enviar ejemplos correos correo cola sql-server tsql

sql server - sysmail_allitems - Compruebe si sp_send_dbmail fue exitoso



sp_send_dbmail sql server 2008 example (2)

Estoy buscando una forma de verificar si un correo electrónico en particular que está en cola con sp_send_dbmail finalmente se envía correctamente desde nuestro servidor de Exchange. He mirado las tablas del sistema msdb.dbo.sysmail_mailitems y msdb.dbo.sysmail_log . msdb.dbo.sysmail_log parece ser el más útil de los dos; En concreto, su columna de description . De las pruebas que he realizado hasta ahora, parece que cada vez que se produce un error, aparece un mensaje en el siguiente formato en la columna de description :

El correo no se pudo enviar a los destinatarios debido a la falla del servidor de correo. (Envío de correo con la cuenta 3 (2012-11-01T11: 28: 04). Mensaje de excepción: No se pueden enviar correos al servidor de correo. (Buzón no disponible. La respuesta del servidor fue: 5.7.1 No se puede retransmitir para [email protected]) .)

Esto se incluye con otras filas que comparten el mismo process_id . La descripción de los registros adjuntos son

Se inicia el proceso DatabaseMail

y

El proceso de DatabaseMail se está cerrando

Si un correo electrónico se envió con éxito, las mismas 2 filas se registran en la tabla, excepto que no hay filas entre ellas.

Así que si tengo un envío exitoso, lo siguiente aparece en la tabla

y si tengo un error de envío, el registro registra esto

¿Hay otras instancias de cómo se podrían registrar las entradas si un envío falló o si un envío fue exitoso? Por ejemplo, podría ser posible que haya 4 filas de entradas para un envío (2 que encierran indicando cuándo se inició y cuándo se cerró, y 2 adjuntas que indican que el correo electrónico se envió con éxito). No he encontrado ningún registro que divergiera del patrón mencionado anteriormente, pero me gustaría estar seguro antes de escribir la lógica en base a este supuesto.



sysmail_faileditems solo le proporcionará la lista de correos electrónicos fallidos. Si necesita ver una lista de correos electrónicos exitosos, necesita usar sysmail_mailitems .

Utilice la siguiente consulta para obtener detalles de todos los correos electrónicos enviados en la misma fecha:

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

Y aquí está la consulta completa para obtener todos los correos electrónicos fallidos de las últimas 24 horas:

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