我正在把头发扯下来。最近(大约一个月前)我们的 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
- 我已经用谷歌搜索了我在这里输入的所有信息的所有可能组合,但无济于事