我正在寻找一种方法来检查排队使用的特定电子邮件sp_send_dbmail是否最终成功从我们的Exchange服务器发送.我查看了系统表msdb.dbo.sysmail_mailitems和msdb.dbo.sysmail_log. msdb.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个说明,并且2个封闭表明电子邮件已成功发送).我发现没有与上面列出的模式不同的日志记录,但是在我根据这个假设编写逻辑之前我想确定.
Ale*_*x Z 32
sysmail_faileditems只会找到失败的电子邮件列表.如果您需要查看需要使用的成功电子邮件列表sysmail_mailitems.
使用以下查询获取同一日期发送的所有电子邮件的详细信息:
SELECT * FROM msdb..sysmail_mailitems WHERE sent_date > DATEADD(DAY, -1,GETDATE())
Run Code Online (Sandbox Code Playgroud)
以下是获取过去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())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
78567 次 |
| 最近记录: |