sysmail_unsentitems (Transact-SQL)
具有 unsent 或 retrying 状态的每个数据库邮件都在视图中占一行。具有“未发送”或“正在重试”状态的消息仍位于邮件队列中,并可能随时发送。消息可能具有 unsent 状态的原因如下:
- 消息为新消息,并且虽然该消息已放在邮件队列中,但数据库邮件正在处理其他消息,尚未处理该消息。
- 数据库邮件外部程序未运行,没有发送任何邮件。
消息可能具有 retrying 状态的原因如下:
- 数据库邮件已尝试发送邮件,但无法与 SMTP 邮件服务器联系。数据库邮件将继续尝试使用其他数据库邮件帐户(分配给发送消息的配置文件)发送消息。如果任何帐户都不能发送邮件,则数据库邮件将等待针对“帐户重试延迟时间”参数配置的时间长度,然后再次尝试发送消息。数据库邮件使用 Account Retry Attempts 参数来确定尝试发送消息的次数。在数据库邮件尝试发送消息期间,消息一直保持 retrying 状态。
如果要查看正在等待发送的消息数以及消息已在邮件队列中存在的时间,则请使用该视图。通常,unsent 消息的数量将会很少。请在正常操作过程中进行基准测试,以确定消息队列中合理的消息数以便进行操作。
若要查看数据库邮件处理的所有消息,请使用 sysmail_allitems (Transact-SQL)。若要仅查看具有失败状态的消息,请使用 sysmail_faileditems (Transact-SQL)。若要仅查看已发送的消息,请使用 sysmail_sentitems (Transact-SQL)。
列名 | 数据类型 | 说明 |
---|---|---|
mailitem_id |
int |
邮件队列中邮件项的标识符。 |
profile_id |
int |
提交消息所用配置文件的标识符。 |
recipients |
varchar(max) |
消息收件人的电子邮件地址。 |
copy_recipients |
varchar(max) |
接收消息副本的用户的电子邮件地址。 |
blind_copy_recipients |
varchar(max) |
接收消息副本但其姓名未出现在消息标头中的用户的电子邮件地址。 |
subject |
nvarchar(510) |
消息的主题行。 |
body |
varchar(max) |
消息的正文。 |
body_format |
varchar(20) |
消息正文的格式。可能值为 TEXT 和 HTML。 |
importance |
varchar(6) |
消息的 importance 参数。 |
sensitivity |
varchar(12) |
消息的 sensitivity 参数。 |
file_attachments |
varchar(max) |
附加到电子邮件中的文件名列表,以分号分隔。 |
attachment_encoding |
varchar(20) |
邮件附件的类型。 |
query |
varchar(max) |
邮件程序所执行的查询。 |
execute_query_database |
sysname |
邮件程序在其中执行查询的数据库上下文。 |
attach_query_result_as_file |
bit |
如果该值为 0,则查询结果包含在电子邮件的正文中,在正文的内容之后。如果该值为 1,则结果作为附件返回。 |
query_result_header |
bit |
如果该值为 1,则查询结果包含列标题。如果该值为 0,则查询结果不包含列标题。 |
query_result_width |
int |
消息的 query_result_width 参数。 |
query_result_separator |
char(1) |
用于分隔查询输出中的各列的字符。 |
exclude_query_output |
bit |
消息的 exclude_query_output 参数。有关详细信息,请参阅 sp_send_dbmail (Transact-SQL)。 |
append_query_error |
bit |
消息的 append_query_error 参数。0 指示如果查询中存在错误,则数据库邮件不应发送电子邮件。 |
send_request_date |
datetime |
将消息放在邮件队列中的日期和时间。 |
send_request_user |
sysname |
提交消息的用户。这是数据库邮件过程的用户上下文,不是消息的“发件人”字段。 |
sent_account_id |
int |
发送消息所用数据库邮件帐户的标识符。对于该视图,始终为 NULL。 |
sent_status |
varchar(8) |
如果数据库邮件尚未尝试发送邮件,则为 unsent。如果数据库邮件无法发送消息但正在尝试再次发送,则为 retrying。 |
sent_date |
datetime |
数据库邮件上次尝试发送邮件的日期和时间。如果数据库邮件尚未尝试发送消息,则为 NULL。 |
last_mod_date |
datetime |
上次修改行的日期和时间。 |
last_mod_user |
sysname |
上次修改行的用户。 |
备注
排除数据库邮件故障时,该视图通过向您显示正在等待发送的消息数以及消息已等待的时间,可帮助您确定问题的本质。如果没有发送任何消息,则数据库邮件外部程序可能未运行,或者可能存在网络问题阻止了数据库邮件与 SMTP 服务器的联系。如果许多未发送的消息都具有相同的 profile_id,则 SMTP 服务器可能出现问题。请考虑向配置文件中添加其他帐户。如果正在发送消息,但消息在队列中等待的时间过长,则 SQL Server 可能需要更多的资源来处理您所需的消息量。
权限
授予 sysadmin 固定服务器角色和 DatabaseMailUserRole 数据库角色。当由 sysadmin 固定服务器角色的成员执行时,该视图显示所有的 unsent 或 retrying 消息。所有其他用户仅可查看他们已提交的 unsent 或 retrying 消息。