如何在Windows 2008上的IIS 7.5中配置CDOSYS?

时间:2015-07-07 11:02:04

标签: windows iis windows-server-2008-r2 windows-server-2003 cdo.message

就像你们这么多人一样,我正在将一个传统的经典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开发人员,他们不知道如何配置这个,而原来设置它的人已经开始了。我完全有可能在这里错过一个非常简单的基本概念。

1 个答案:

答案 0 :(得分:0)

我发现当我以管理员身份登录时,我能够使用我的示例Powershell脚本。从那里开始的研究引导我找到一个post on the IIS forums来解决这个问题。不幸的是,它现在导致一些死链接,这意味着它不起作用。然而,它有足够的提示来组合解决方案:

  1. 下载并安装IIS Resource Kit Tools
  2. 以管理员身份执行C:\Program Files (x86)\IIS Resources\Metabase Explorer\MBExplorer.exe
  3. 导航至/LM/SmtpSvc,右键单击它并选择“属性”。
  4. 输入您要授予其权限的组。就我而言,只有User和IIS_IUSRS才具有读访问权限。
  5. 导航至/LM/SmtpSvc/1,并在此节点上设置相同的权限。
  6. 将对IIS_IUSRS和用户的读/写权限授予c:\inetpub\mailroot
  7. 因此,根本原因是我尝试执行此操作的用户没有正确的权限。

    遗憾的是,我无法弄清楚如何编写这些步骤的脚本。该帖子引用了我在任何地方都找不到的“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