0

我正在把头发扯下来。最近(大约一个月前)我们的 SQL 2000 服务器上的一些存储过程停止发送电子邮件。我们在不同的数据库中有多个版本的相同存储过程,它们都同时损坏(我知道这是糟糕的设计,但这不是我想讨论的:))

存储过程使用 ole 自动化来发送电子邮件。例如

EXEC @resultcode = sp_OACreate 'CDO.Message', @iMsg OUT
EXEC @resultcode = sp_OASetProperty @iMsg, 'To', 'someguy@domain.com'

现在由于某种原因sp_OASetProperty 在设置“To”、“From”、“Subject”或“TextBody”属性时失败。@iMsg 不为 NULL,因此创建工作正常。sp_OASetProperty 还适用于其他几个属性:

EXEC @resultcode = sp_OASetProperty @iMsg, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value','2'
EXEC @resultcode = sp_OASetProperty @iMsg, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value', 'smtp.domain.com'

sp_OASetProperty 失败时返回的结果代码是 -2147220991。使用 sp_OAGetErrorInfo 会返回以下信息。错误:0x80040201,源:NULL,描述:在地址生成异常 0xc0000005...

其他一些使调试变得如此困难的信息:

  • 仅发生在 Prod 服务器、测试、uat 和开发人员机器上都可以(并且都使用相同的 SMTP 服务器)
  • 存储过程最近没有更改,它们只是有一天坏了(我们有一段时间没有注意到,所以很难确定当时还做了哪些其他更改)
  • 我写了一个快速的 DotNet 应用程序并将其放在服务器上以测试电子邮件连接,它运行良好
  • 我尝试用服务器中的文件替换我的本地“odsole70.dll”文件,它仍然可以正常工作,所以我不相信它是一个损坏的 dll
  • 我已经用谷歌搜索了我在这里输入的所有信息的所有可能组合,但无济于事
4

1 回答 1

0

事实证明,交换服务器发生了一些变化。重新启动 SQL 服务解决了该问题。这可能只是在生产中被注意到的一个问题,因为测试服务器更频繁地重新启动。

于 2011-03-23T22:15:41.933 回答