文章编号: 315886 - 最后修改: 2004年6月29日 - 修订: 5.1

INF:常见 SQL Mail 问题

本文的发布号曾为 CHS315886

本页

展开全部 | 关闭全部

概要

本文通过问答的形式介绍使用 SQL Mail 时可能遇到的常见问题,并提供关于如何更正或解决这些问题的一些提示。绝大多数与 SQL Mail 有关的问题都是因配置不当造成的。 有关如何正确配置 SQL Mail 的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
263556? (http://support.microsoft.com/kb/263556/ ) INF:如何配置 SQL Mail
本文假定您对 Q263556 中提供的背景信息具有应用方面的经验。除非另外说明,否则本文中有关 SQL Mail 的说明也适用于 SQLAgentMail。

更多信息

检查配置

纠正不正确的配置可解决绝大多数 SQL Mail 问题。为确认您是否正确地配置了 SQL Mail,请使用下面的列表:
  • 运行 SQL Server 的计算机上必须安装有邮件客户端程序(例如 Microsoft Outlook)。
  • 对于 Microsoft Outlook 2000,请使用企业或工作组选项(Microsoft Outlook 2002 没有企业或工作组选项)。要选择此选项,请在工具菜单上,单击选项,然后双击邮件服务选项卡。在邮件服务对话框中,单击邮件支持命令。当使用 Internet 邮件服务器时,除非 Outlook 客户端程序一直处于运行状态,否则 Microsoft Outlook 2002 不能和 SQL Mail 一起使用。
  • 您必须具有正在工作的邮件服务器,例如 Microsoft Exchange 或 Internet 邮件(邮局协议 3 [POP3] 或简单邮件传输协议 [SMTP])服务器。外发邮件 SMTP 服务器不一定要和接收邮件 POP3 服务器相同,但是即使不准备将邮件发送到 SQL Mail,您也必须具有有效的接收邮件服务器,并且这个服务器已配置邮件帐户。
  • 如果您正在使用 Exchange 服务器,则用来启动 SQL Server 服务的帐户必须是一个域帐户。该域帐户必须在 Exchange 服务器上具有邮箱。如果您正在使用 Internet 邮件服务器,则可以使用本地帐户启动 SQL Server。但是,在任何情况下用来启动 SQL Server 的帐户都不能是本地系统帐户。如果您正在使用 SQLAgentMail,相同的规则也适用于用来启动 SQL Agent 的服务帐户。
  • 因为邮件配置文件与 Microsoft Windows 登录帐户关联,所以您必须使用 SQL Server 服务启动帐户登录到正在运行 SQL Server 的计算机以检查可用于 SQL Server 的邮件配置文件。例如,打开控制面板。在控制面板对话框中,双击邮件。在邮件对话框中,双击显示配置文件。如果您正在使用 SQLAgentMail 并且 SQL Agent 服务帐户不同于 SQL Server 服务帐户,则您还必须使用 SQL Agent 服务启动帐户登录以检查可用于 SQL Agent 的邮件配置文件。
  • 您必须能够打开邮件客户端程序并测试邮件服务器发送和接收电子邮件的情况。不应该显示任何要求用户操作的对话框或信息。SQL Mail 使用邮件客户端程序发送邮件。因为 SQL Mail 在 SQL Server 服务中运行,任何要求用户交互的对话框都将显示在“虚拟桌面”上,从而不会接收到任何响应。缺少响应将导致 SQL Mail 停止响应(挂起)。
  • 您必须向 SQL Mail 提供用于测试邮件客户端程序配置的邮件配置文件。为此,在“企业管理器”中,打开支持服务文件夹。在支持服务文件夹中,右键单击 SQL Mail,然后单击属性。如果使用 SQLAgentMail,则您必须向 SQL Agent 提供邮件配置文件。为此,在“企业管理器”中,打开管理文件夹,右键单击 SQL Agent,然后单击属性
  • 默认的 Internet 电子邮件程序必须和用来测试邮件配置的邮件客户端程序相同。为确认您是否有正确的程序,请打开控制面板,双击 Internet 选项,然后单击程序选项卡。
  • 为了让前面的所有更改生效,您必须停止,然后重新启动 SQL Server 服务。如果您重新配置了默认的邮件配置文件,则必须重新启动计算机让更改生效。

常见问题

下面列出了客户经常遇到的与 SQL Mail 相关的问题。对这些问题的讨论是以问答形式进行的。这些问题不是按出现的频率排列的,而是将类似的问题放在一起。虽然这些解答不能说明所有可能的原因,但是它们的确反映了特定问题的主要原因。

问题 1:为什么在我升级到 SQL Server 2000 之后 SQL Mail 无法工作?

解答 1:SQL Server 2000 对 SQL Mail 进行了重要的更改。主要的更改是,SQL Mail 现在使用扩展的“邮件应用程序编程接口”(MAPI),而不是简单的 MAPI。 有关简单 MAPI 与扩展 MAPI 的区别方面的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
200018? (http://support.microsoft.com/kb/200018/ ) INFO:CDO、简单 MAPI 及扩展 MAPI 之间的区别
如果您使用的是 SQL Server 2000,Microsoft 极力建议您在尝试使用 SQL Mail 之前应用 Microsoft SQL Server 2000 Service Pack 2 (SP2) 或更高版本。

问题 2:为什么在我升级了 Microsoft Outlook 或应用了 Outlook 安全修补程序之后 SQL Mail 无法工作?

解答 2:2001 年 8 月份发布的 Outlook 2000 电子邮件安全更新可以防止电子邮件蠕虫的蔓延,这种蠕虫病毒是通过将自己发送给您的通讯簿中的每个人而进行传播的。此安全修补程序在有非 Outlook 程序发送电子邮件时会检测到这一情况,并将显示一个包含以下信息的对话框:
A program is trying to automatically send e-mail on your behalf.Do you want to allow this?(有一个程序正试图以您的名义自动发送电子邮件。是否允许该操作?)
如果希望发送此邮件,则必须单击

SQL Server 6.5 和 SQL Server 7.0 的 SQL Mail 被认为是尝试发送邮件的非 Outlook 程序。但是,由于 SQL Mail 是在 SQL Server 服务中被调用的,因此该对话框将被发送到 SQL Server 服务的“虚拟桌面”,从而不会显示在服务器上。因为未发生用户交互,所以 SQL Mail 将停止响应。

可以请 Exchange 管理员来放松此安全功能的限制,但是更好的解决办法是升级到 SQL Server 2000。SQL Server 2000 中的 SQL Mail 可建立一种扩展的 MAPI 连接,该连接可以绕过安全对话框。 有关 Outlook 安全修补程序的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
262631? (http://support.microsoft.com/kb/262631/ ) OL2000:有关 Outlook 电子邮件安全更新的信息
Microsoft Outlook 2002 包括 Outlook 2000 安全更新中的安全功能。

如果正在使用 SQL Server 2000 并且在升级到 Outlook 2002 之后 SQL Mail 停止工作,则您可能正在使用 Internet 邮件服务器。您可以配置 Outlook 以前的版本以便可以从 Microsoft Windows 服务发送邮件。为提高使用非 Exchange 邮件时的性能,邮件后台处理程序运行在 Microsoft Outlook 2002 的进程空间,Outlook 2002 要求在向非 Exchange 服务器发送邮件时 Outlook 客户端程序始终处于打开状态。如果不想让 Outlook 2002 客户端程序在服务器上总保持运行状态(需要您登录到服务器上),则必须使用 Exchange 服务器作为邮件服务器或回退到 Microsoft Outlook 以前的版本。

问题 3:如何才能知道我的服务器上是否安装了 Outlook 安全修补程序?

解答 3:在 Outlook 的帮助菜单上,单击关于 Microsoft Outlook。如果 Outlook 2000 的版本是 9.0.0.4201 或更高版本,则表明您已经安装了 Outlook 电子邮件安全更新程序。

问题 4:如果安装了 Outlook 安全修补程序或正在使用 Outlook 2002,那么应如何防止 SQL Mail 挂起?

解答 4:您必须和 Exchange 管理员一起更改默认安全设置。具体的过程取决于您是在使用 Outlook 2000 还是在使用 Outlook 2002(由 Office XP 提供)。 有关更改 Exchange 安全设置的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
263297? (http://support.microsoft.com/kb/263297/ ) OL2000:有关 Outlook 电子邮件安全更新的管理员信息
290499? (http://support.microsoft.com/kb/290499/ ) OL2002:有关电子邮件安全功能的管理员信息
问题 5:为什么我的外发邮件卡在收件箱中?

解答 5:Outlook 2002 更有可能出现此问题。为提高 Internet 电子邮件性能,Office 开发小组将非 Exchange 邮件的邮件后台处理程序移到了 Outlook 的进程空间。Outlook 客户端程序必须处于打开状态才能发送外发电子邮件。此问题不影响 Outlooks 向 Exchange 服务器发送的电子邮件。

当使用 Outlook 2000 时也会遇到此问题。在这种情况下,可能性最大的原因是您未在邮件配置文件中提供一个工作 POP3 服务器作为接收邮件服务器。

问题 6:为什么我的外发邮件卡在发件箱中?

解答 6:较早的电子邮件客户端程序(如 Microsoft Windows Messaging 和 Microsoft Outlook 97)经常会出现此问题。当时从未想到要从 Windows 服务(例如 SQL Server)中调用这些邮件客户端程序。 有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
237913? (http://support.microsoft.com/kb/237913/ ) INFO:Outlook 对象模型不适于在 Windows 服务中运行
这些邮件客户端程序目前已退出使用,因此您应该不会再遇到此问题。但是,如果遇到此问题,您可以与 Microsoft 产品支持服务部门联系以获得修复程序。

问题 7:为什么已发送的邮件文件夹中没有发送的邮件?

解答 7:SQL Server 6.5 和 SQL Server 7.0 的 SQL Mail 在 Outlook 的已发送的邮件文件夹中保存已发送邮件的副本,这是简单 MAPI 接口的默认行为。即使在 Outlook 邮件客户端程序中通过清除在“已发送邮件”文件夹中保存邮件的副本选项禁用此选项,该选项也将被忽略。

SQL Server 2000 的 SQL Mail 是使用扩展 MAPI 接口编写的,不在已发送邮件文件夹中保存已发送邮件的副本。如果需要 SQL Mail 从 SQL Server 2000 发送的邮件的副本,您必须将它们抄送给自己并创建一个 Outlook 邮件规则将这些邮件路由到已发送邮件文件夹。

问题 8:为什么我的邮箱已满但看不到已发送邮件文件夹中有任何邮件?

解答 8:在 SQL Server 7.0 和 SQL Server 2000 中,SQL Server Agent 属性窗口中有一个选项可以将已发送邮件的副本保存在“已发送邮件”文件夹中。如果您不选择该选项,则 SQL Mail 会将 SQL Server Agent 邮件的副本保存在 Exchange 服务器的根文件夹中。当邮箱变满之后,xp_sendmail 存储过程将无法发送邮件,同时伴随其他系统响应,其中包括返回错误 0x80040403 或 MAPI_E_TABLE_TOO_BIG 错误信息。

您将无法在 Microsoft Outlook 中看到 SQLAgentMail 的副本,需要使用 Microsoft Exchange 实用工具 MDB Viewer 来查看和删除这些邮件。 有关如何纠正这一问题的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
261133? (http://support.microsoft.com/kb/261133/ ) FIX:DTS“发送邮件”填满邮箱但 Outlook 无法看到或删除电子邮件
308758? (http://support.microsoft.com/kb/308758/ ) FIX:SQL Agent Mail 可能会导致电子邮件写入源邮箱的根目录
问题 9:为什么 SQL Mail 没有删除电子邮件附件?

解答 9:如果您运行 xp_sendmail 存储过程并且 @attach_results 为真,则为附件创建的临时文件将留在安装 Windows 操作系统的 System32 目录中。所有 SQL Server 版本都存在这一行为。 有关此问题的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
151545? (http://support.microsoft.com/kb/151545/ ) BUG:xp_sendmail 和 @query 会使临时文件保留在服务器上
问题 10:为什么 SQL Mail 属性的下拉框中没有列出任何邮件配置文件?

解答 10:将 SQL Server 在其下运行的服务配置为使用本地系统帐户启动是导致该问题的一个可能的原因。本地系统帐户没有与之关联的 Windows 登录,因此无法为 SQL Server 配置任何邮件配置文件。请参考本文 一节中关于选择合适的服务启动帐户的说明。

该帐户没有邮件配置文件可用于启动 MSSQL Server 服务是导致该问题的另一个可能的原因。若要配置用于 SQL Server Mail 的邮件配置文件,您必须首先使用与启动 MSSQL Server 服务相同的登录名和密码登录到运行 SQL Server 的 Windows 计算机。

您不能将 Microsoft Outlook 设置为默认的电子邮件客户程序。请参考本文 一节中关于检查默认电子邮件程序的说明。
问题 11:为什么 SQL Mail 只在我登录到服务器时才工作?

解答 11:这表示您没有正确配置 SQL Mail。请按照本文 一节的设置检查表,确认您是否正确配置了 SQL Mail。例如,可能未为邮件配置提供工作 POP3(接收邮件)服务器。

另一个可能的原因是您正在将 Outlook 2002 用于 Internet 邮件服务器。Outlook 2002 对待非 Exchange 服务器的方式不同于 Exchange 服务器。因为非 Exchange 邮件服务器的邮件后台处理程序运行于 Outlook 进程空间中,为了发送 Internet 邮件,您必须让 Outlook 2002 客户端程序保持在运行状态。如果您从服务器注销,则 Outlook 客户端程序将关闭,于是不再发送邮件。若要解决此问题,您必须使用 Outlook 2000 或切换为 Exchange 服务器。

问题 12:SQL Mail 为什么停止响应(挂起)?

解答 12:如果 SQL Mail 定期挂起,最有可能的原因是失去了与邮件服务器的连接。经验显示,当使用 Internet 邮件 (POP3/SMTP) 服务器时 SQL Mail 停止响应的可能性更大,但如果与 Exchange 服务器的连接出现故障,它也会停止响应。

这时所发生的情况就是邮件客户端程序试图连接到邮件服务器。如果连接失败,将显示一条来自邮件客户端程序的信息,要求用户操作以确定是继续还是取消。因为 SQL Mail 是在 SQL Server 服务中运行的,所以该信息不显示在服务器上。因为信息不显示,所以不会发生任何用户操作,于是 SQL Mail 将无期限地等待下去。即使重新建立网络连接,SQL Mail 也不会自动重置并重试。您必须首先停止并重新启动 SQL Server 服务,然后才可以重新开始发送邮件。

SQL Mail 停止响应的另一个可能的原因是一项新的 Outlook 安全功能,该功能会在非 Outlook 应用程序发送电子邮件时发出警告。SQL Server 6.5 和 SQL Server 7.0 的 SQL Mail 就是这样的非 Outlook 应用程序。如果 SQL Mail 发送邮件时显示安全对话框窗口,则产生的情况与丢失与邮件服务器的连接类似,于是 SQL Mail 将停止响应。

问题 13:如何判断是不是对话框信息导致了 SQL Mail 停止响应?

解答 13:因为 SQL Mail 是通过 SQL Server 服务运行的,所以导致 SQL Mail 停止响应的任何对话框信息都不会出现在您的桌面上。若要确定 SQL Mail 是否生成了对话框信息,您必须将 SQL Server 作为控制台应用程序运行,而不是作为服务运行。为此,请执行下列步骤:

  1. 使用与启动 SQL Server 服务相同的帐户登录到 Windows 服务器上。
  2. 打开一个命令提示符窗口。如果您正在使用 SQL Server 2000,则必须浏览到安装 SQL Server 实例的可执行文件的目录。
  3. 通过执行以下命令将 SQL Server 作为应用程序启动:

    sqlservr -c

    注意:对于 SQL Server 2000,如果使用命名实例,则您必须对实例名称添加 -s
  4. 通过查询分析器连接到 SQL Server,然后运行 xp_sendmail 扩展存储过程来测试邮件发送。如果未使用 SQL Server 2000,则在尝试发送邮件之前可能需要运行 xp_startmail 扩展存储过程来启动 SQL Mail。
  5. 如果出现对话框,则您必须更正此问题,然后才能使用 SQL Mail。
问题 14:为什么使用邮件通知的计划作业停止工作?

解答 14:当从 SQL Agent 中的计划作业调用时,SQLAgentMail 也会停止响应。请参阅问题 13 的解答了解导致 SQL Mail 停止响应的最常见原因。例如,SQLAgentMail 在计划作业完成时通知操作员,这便是一个同步调用。如果由于任何原因导致与邮件服务器的连接停止响应,则发出发送邮件命令的作业计划程序将停止响应,在该问题得到更正,停止并重新启动 SQL Server Agent 之前,任何其他计划作业都将停止运行。

问题 15:为什么我收到“Mapi logon failure”这一信息?

解答 15:“Mapi logon failure”这一信息通常表示 SQL Mail 未能找到用于启动的邮件配置文件。请按照本文 一节的设置检查表,确认您是否正确配置了 SQL Mail。

另一个原因是您的邮件配置文件已被损坏或配置文件的名称大于 32 个字符。最好删除该邮件配置文件并重新创建具有较短名称的邮件配置文件,从而确保具有正常工作的邮件配置文件。

问题 16:为什么我收到“General mapi failure”这一信息?

解答 16:信息“General mapi failure”通常是由不正确的 SQL Mail 配置引起的。请按照本文 一节的设置检查表,确认您是否正确配置了 SQL Mail。

问题 17:为什么在我的 SQL Server 错误日志中出现错误 1073759806 和 1073759778?

解答 17:如果在 SQL Server 2000 上通过使用 xp_startmail 扩展存储过程启动 SQL Mail,则您将在 SQL Server 错误日志中看到以下错误信息:

Error:1073759806, Severity:1, State:0 Starting SQL Mail session....
Error:1073759778, Severity:1, State:0 SQL Mail session started..
这些都是由于使用 xp_startmail 启动 SQL Mail 而出现的告知性(严重等级 = 1)信息。在 SQL Server 2000 中,当运行 xp_sendmail 时,SQL Mail 会自动启动,因此不必要使用 xp_startmail。您可以忽略这些信息。

问题 18:为什么我在尝试发送邮件时收到邮件错误 0x80040111(或类似的十六进制数字)?

解答 18:解决此问题的第一步是确定与此十六进制错误号关联的错误信息。MAPI 不会将错误号转换为字符串,因此 SQL Mail 只能返回错误号。 有关如何解释 MAPI 返回代码的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
238119? (http://support.microsoft.com/kb/238119/ ) INFO:扩展的 MAPI 数字结果代码列表
查看十六进制值 0x80040111 时,您会看到它对应于 MAPI 错误信息 MAPI_E_LOGON_FAILED,这表明 SQL Mail 无法使用提供的邮件配置文件登录。于是,您可以根据错误信息采取纠正操作。

问题 19:为什么会出现 SQL Mail 工作但 SQLAgentMail 不工作或相反的情况?

解答 19:一种可能性是 SQL Server 和 SQL Agent 服务是使用不同的帐户启动的。更改不能用于邮件的服务的启动帐户,使用与可用于邮件的服务相同的帐户进行启动。在测试此更改是否纠正了问题之前,请先停止,然后重新启动该服务。

注意:如果您正在将 SQL Mail 和 Internet 邮件服务一起使用,则个人存储文件 (.pst) 用于存储从 POP3 服务器下载的电子邮件。此 .pst 文件供使用此邮件配置文件的所有服务使用,如果 SQL Mail 和 SQL Agent Mail 同时使用相同的邮件配置文件,则将导致冲突。 有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
313969? (http://support.microsoft.com/kb/313969/ ) PRB:SQL Mail 使用 POP3 Server 配置文件时出现“无法打开 .pst 文件”错误信息
另一个可能是配置文件不同。在服务帐户相同之后,更改不工作的邮件实用工具以使用正在工作的相同邮件配置文件。在测试此更改是否纠正了问题之前,请先停止,然后重新启动该服务。

一定要意识到用于 SQL Server 6.5 和 SQL Server 7.0 的 SQL Mail 使用简单 MAPI,而 SQLAgentMail 使用的是扩展 MAPI。一些邮件客户端程序只支持简单 MAPI 并且可以使用 SQL Mail,但不能使用 SQLAgentMail。 有关可以使用 SQL Mail 的邮件客户端程序的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
311231? (http://support.microsoft.com/kb/311231/ ) INF:SQL Server - SQL Mail 常见问答
默认的邮件客户端程序也会影响 SQL Mail 的操作。请参考本文 一节中关于如何检查和更改默认邮件程序的说明。

问题 20:为什么测试按钮提示说可以使用我的配置文件启动和停止 SQL Mail,但我却无法启动 SQL Mail?

解答 20:SQL Mail(或 SQLAgentMail)属性对话框中的测试按钮只测试您是否可以使用提供的邮件配置文件启动 SQL Mail。它不能保证 SQL Mail 是否使用该配置文件。出现这种情况的原因是某些情况下 SQL Mail 可能会忽略所提供的邮件配置文件并且仍使用指定的默认邮件客户端程序。例如,如果默认邮件客户端程序是 Outlook Express,但未在服务器上配置 Outlook Express,SQL Mail 会在启动过程中尝试使用它,于是 SQL Mail 便不能正常工作。

服务器上的默认邮件客户端程序一定要和用于配置提供给 SQL Mail 的邮件配置文件的邮件客户端程序相同。请参考本文 一节中关于如何检查和更改默认邮件程序的说明。

问题 21:为什么 SQL Mail 无法在我的群集服务器上进行故障转移?

解答 21:因为 SQL Mail 使用的 MAPI 接口不能识别群集,所以群集 SQL Server 上不支持 SQL Mail。 有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
298723? (http://support.microsoft.com/kb/298723/ ) BUG:不完全支持 SQL Mail 与群集虚拟 SQL Server 联合使用
问题 22:为什么 SQL Mail 不能使用通讯组列表?

解答 22:用于 SQL Server 6.5 和 SQL Server 7.0 的 SQL Mail 允许使用通讯组列表发送邮件。用于 SQL Server 2000 的 SQL Mail 中通讯组列表的使用只在特定的配置中工作。 有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
315666? (http://support.microsoft.com/kb/315666/ ) BUG:XP_SENDMAIL 向个人通讯组列表发送邮件失败

附加资源

有关排查 SQL Mail 问题方面的其他信息,请参见以下 Microsoft Web 站点:
支持网络发布:Microsoft SQL Mail 疑难解答
http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com/servicedesks/webcasts/wc091301/wcblurb091301.asp (http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com/servicedesks/webcasts/wc091301/wcblurb091301.asp)

这篇文章中的信息适用于:
  • Microsoft SQL Server 2000 标准版
  • Microsoft SQL Server 6.5 标准版
  • Microsoft SQL Server 7.0 标准版
关键字:?
kbfaq kbhowto kbinfo KB315886
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。
 

文章翻译

 

Related Support Centers