就像你们这么多人一样,我正在将一个传统的经典ASP应用程序从Windows 2003服务器移动到Windows 2008.我有这个主要工作,但我无法通过它发送电子邮件。这是因为未正确配置CDOSYS。尽管大约4-5个小时'谷歌搜索和运行API文档,甚至搜索文件系统和系统注册表上的所有文件,我无法弄清楚这是设置的位置。
遗留应用程序的ASP.NET部分工作正常。它能够在没有身份验证的情况下向localhost发送电子邮件,然后通过身份验证将其传递到邮件服务器,以便发送到目的地。
为方便起见,我将源代码中的VB6调用转换为Powershell脚本:
$config = new-object -com "CDO.Configuration";
$config.Load(1);
$smtp = new-object -com "CDO.Message";
$smtp.Configuration = $config;
$smtp.From = "me@example.com"
$smtp.To = "me@example.com"
$smtp.Subject = "test"
$smtp.TextBody = "Message";
$smtp.Send();
此脚本在我的原始服务器上正确发送电子邮件。在新服务器上,它在调用$smtp.Send()
时返回此错误:
异常呼叫"发送"用" 0"参数:"" SendUsing"配置值无效。
两台服务器之间的配置完全不同。使用上面的$config
引用,我在两台服务器上执行了$config.Fields | Format-List -Property Name,Value
。
旧服务器(工作地点):
Name : http://schemas.microsoft.com/cdo/configuration/languagecode
Value : en-us
Name : http://schemas.microsoft.com/cdo/configuration/postusing
Value : 0
Name : http://schemas.microsoft.com/cdo/configuration/sendusing
Value : 1
Name : http://schemas.microsoft.com/cdo/configuration/smtpserverpickupdirectory
Value : D:\Inetpub\mailroot\Pickup
Name : http://schemas.microsoft.com/cdo/configuration/usemessageresponsetext
Value : True
Name : urn:schemas:calendar:timezoneid
Value : 1
新服务器:
Name : http://schemas.microsoft.com/cdo/configuration/languagecode
Value : en-gb
Name : http://schemas.microsoft.com/cdo/configuration/postusing
Value : 0
Name : http://schemas.microsoft.com/cdo/configuration/sendusing
Value : 0
Name : http://schemas.microsoft.com/cdo/configuration/usemessageresponsetext
Value : True
Name : urn:schemas:calendar:timezoneid
Value : 0
似乎我需要做的就是将其配置为默认情况下将邮件发送到localhost,或者将邮件丢弃到拾取目录中。 IIS SMTP服务器已配置为查看此目录。
但是,我无法确定这些值的设置位置。它们必须设置在某个文件或注册表中,但甚至可以在C盘中搜索,例如" \ Pickup"和" usemessageresponsetext"等等没有透露任何东西。如果他们在某个地方,我猜他们会在某个地方的二进制数据存储中。
CDOSYS的所有示例都涉及直接配置CDO.Configuration或CDO.Message实例,但是整个代码中我们的应用程序都从IIS加载配置,所以不知何故这是由某人设置的。
我错过了经典的ASP时代,所以我处在一个非常陌生的领域。也就是说,我的同事是活跃的经典ASP开发人员,他们不知道如何配置这个,而原来设置它的人已经开始了。我完全有可能在这里错过一个非常简单的基本概念。
答案 0 :(得分:0)
我发现当我以管理员身份登录时,我能够使用我的示例Powershell脚本。从那里开始的研究引导我找到一个post on the IIS forums来解决这个问题。不幸的是,它现在导致一些死链接,这意味着它不起作用。然而,它有足够的提示来组合解决方案:
C:\Program Files (x86)\IIS Resources\Metabase Explorer\MBExplorer.exe
。/LM/SmtpSvc
,右键单击它并选择“属性”。/LM/SmtpSvc/1
,并在此节点上设置相同的权限。c:\inetpub\mailroot
因此,根本原因是我尝试执行此操作的用户没有正确的权限。
遗憾的是,我无法弄清楚如何编写这些步骤的脚本。该帖子引用了我在任何地方都找不到的“metaacl.vbs”脚本;声称拥有它的所有链接都已死亡。它也可以通过上面链接的IIS Resource Kit工具安装,但我无法在我的服务器上找到它。
如果您能找到某个地方,您就可以执行上述步骤:
cscript metaacl.vbs IIS://LOCALHOST/SMTPSVC %computername%\IIS_IUSRS R
cscript metaacl.vbs IIS://LOCALHOST/SMTPSVC/1 %computername%\IIS_IUSRS R