检查如果sp_send_dbmail是否成功(Check If sp_send_dbmail Was

2019-07-19 03:47发布

我正在寻找一种方法来检查,如果一个特定的电子邮件使用队列sp_send_dbmail最终被成功从我们的Exchange服务器发送。 我已经看过了系统表msdb.dbo.sysmail_mailitemsmsdb.dbo.sysmail_logmsdb.dbo.sysmail_log似乎是更有帮助的两个; 具体地,其description列。 从我目前所进行的试验,似乎只要出现错误,在以下格式的消息显示在description栏:

邮件无法发送,因为邮件服务器故障的收件人。 (发送使用帐户3(2012-11-01T11邮件:28:04)异常消息:无法发送邮件到邮件服务器(邮箱不可用服务器响应为:5.7.1无法中继的thisemail@email.com) 。)

这是封闭与共享相同的其他行process_id 。 对于封闭记录的说明

DatabaseMail进程启动

DatabaseMail进程正在关闭

如果一封电子邮件发送成功,同样的2行被记录在表中,除了与他们之间没有封闭行。

所以,如果我有一个成功的发送,以下出现在表

如果我有一个发送失败,日志记录本

是否有如何,如果发送失败可以被记录的条目或是否发送成功,其他情况? 例如,它可能是可能有4行的条目的发送(2包围,当它被启动,并且当它关闭,2封闭陈述电子邮件,说明发送成功)。 我发现,从上面列出的模式分歧没有日志记录,但想确保在此基础上假设之前我写的逻辑。

Answer 1:

这从微软的链接似乎是有用的- 如何:查看已发送随着数据库邮件(的Transact-SQL)的电子邮件的状态 。 查看数据库邮件日志和审计,故障排除数据库邮件也相关的主题。



Answer 2:

sysmail_faileditems只会让你失败的邮件列表。 如果你需要看你需要使用全成电子邮件列表sysmail_mailitems

使用下面的查询来获取所有的电子邮件发送细节同一日期:

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

这里是完整的查询,以获得从过去24小时内的所有失败的邮件:

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


文章来源: Check If sp_send_dbmail Was Successful