sysmail_unsentitems (Transact-SQL)

适用于:SQL ServerAzure SQL 托管实例

对于状态为“未发送”或“正在重试”的每个数据库邮件消息,都包含一行。 具有“未发送”或“正在重试”状态的消息仍位于邮件队列中,并可能随时发送。 由于以下原因,消息可能具有 未发送 状态:

  • 消息为新消息,并且虽然该消息已放在邮件队列中,但数据库邮件正在处理其他消息,尚未处理该消息。

  • 数据库邮件外部程序未运行,没有发送任何邮件。

消息可能具有 重试 状态,原因如下:

  • 数据库邮件已尝试发送邮件,但无法与 SMTP 邮件服务器联系。 数据库邮件将继续尝试使用其他数据库邮件帐户(分配给发送消息的配置文件)发送消息。 如果没有帐户可以发送邮件,数据库邮件将等待为帐户重试延迟参数配置的时间长度,然后尝试再次发送邮件。 数据库邮件使用 Account Retry Attempts 参数来确定尝试发送消息的次数。 只要数据库邮件尝试发送消息,消息将保持重试状态。

如果要查看正在等待发送的消息数以及消息已在邮件队列中存在的时间,则请使用该视图。 通常, 未发送 的消息数会很低。 请在正常操作过程中进行基准测试,以确定消息队列中合理的消息数以便进行操作。

若要查看数据库邮件处理的所有消息,请使用 sysmail_allitems (Transact-SQL) 。 若要仅查看状态为失败的消息,请使用 sysmail_faileditems (Transact-SQL) 。 若要仅查看已发送的消息,请使用 sysmail_sentitems (Transact-SQL)

列名称 数据类型 说明
mailitem_id int 邮件队列中邮件项的标识符。
profile_id int 提交消息所用配置文件的标识符。
收件人 varchar(max) 消息收件人的电子邮件地址。
copy_recipients varchar(max) 接收消息副本的用户的电子邮件地址。
blind_copy_recipients varchar(max) 接收消息副本但其姓名未出现在消息标头中的用户的电子邮件地址。
subject nvarchar (510) 消息的主题行。
body varchar(max) 消息正文。
body_format varchar (20) 消息正文的格式。 可能的值为 TEXTHTML
importance varchar(6) 消息的 importance 参数。
sensitivity varchar (12) 消息的 敏感度 参数。
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) 如果数据库邮件未尝试发送邮件,则会取消发送。 如果数据库邮件未能发送消息,但正在重试,则将重试
sent_date datetime 数据库邮件上次尝试发送邮件的日期和时间。 如果数据库邮件尚未尝试发送消息,则为 NULL。
last_mod_date datetime 上次修改行的日期和时间。
last_mod_user sysname 上次修改行的用户。

备注

排除数据库邮件故障时,该视图通过向您显示正在等待发送的消息数以及消息已等待的时间,可帮助您确定问题的本质。 如果没有发送任何消息,则数据库邮件外部程序可能未运行,或者可能存在网络问题阻止了数据库邮件与 SMTP 服务器的联系。 如果许多未发送的邮件具有相同 profile_id,则 SMTP 服务器可能存在问题。 请考虑向配置文件中添加其他帐户。 如果正在发送消息,但消息在队列中花费了太多时间,SQL Server可能需要更多资源来处理所需的消息量。

权限

授予 sysadmin 固定服务器角色和 DatabaseMailUserRole 数据库角色。 当由 sysadmin 固定服务器角色的成员执行时,此视图会显示所有 未发送正在重试 的消息。 所有其他用户仅看到他们提交的 未发送正在重试 的消息。