【问题标题】:How can I configure CDOSYS in IIS 7.5 on Windows 2008?如何在 Windows 2008 上的 IIS 7.5 中配置 CDOSYS?
【发布时间】:2015-07-07 11:02:04
【问题描述】:

现在和你们中的许多人一样,我正在将一个传统的经典 ASP 应用程序从 Windows 2003 服务器迁移到 Windows 2008。我大部分时间都在工作,但我无法通过它发送电子邮件。这是因为 CDOSYS 配置不正确。尽管通过 API 文档搜索和运行了大约 4-5 小时,甚至搜索了文件系统和系统注册表上的所有文件,但我无法弄清楚这是在哪里设置的。

旧版应用程序的 ASP.NET 部分运行良好。它能够在没有身份验证的情况下将电子邮件发送到本地主机,然后通过身份验证传递到邮件服务器以发送到目的地。

为方便起见,我将源代码中的 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”参数调用“Send”的异常:““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

看来,要完成这项工作,我需要做的就是将其配置为默认将邮件发送到本地主机,或者将邮件放在拾取目录中。 IIS SMTP 服务器已配置为查看此目录。

但是,我无法弄清楚这些值的设置位置。它们必须在某个文件或注册表中设置,但即使在 C 驱动器中搜索“\Pickup”和“usemessageresponsetext”等短语也没有发现任何内容。如果它们在某处,我猜它们在某处的二进制数据存储中。

CDOSYS 的所有示例都涉及直接配置 CDO.Configuration 或 CDO.Message 实例,但在整个代码中,我们的应用程序都从 IIS 加载配置,因此不知何故,这是由某人在某一时刻设置的。

我错过了经典的 ASP 时代,所以我处于非常陌生的领域。也就是说,我的同事是活跃的经典 ASP 开发人员,不知道如何配置它,而最初设置它的人已经离开了。我完全有可能在这里遗漏了一个非常简单的基本概念。

【问题讨论】:

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


    【解决方案1】:

    我发现当我以管理员身份登录时,我能够使用我的示例 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. 输入您要授予访问权限的组。在我的例子中,用户和 IIS_IUSRS 都只有读取权限。
    5. 导航到/LM/SmtpSvc/1,并在此节点上设置相同的权限。
    6. 将 IIS_IUSRS 和用户的读/写访问权限授予c:\inetpub\mailroot

    所以,根本原因是我尝试执行此操作的用户没有正确的权限。

    很遗憾,我不知道如何编写这些步骤的脚本。该帖子引用了我在任何地方都找不到的“metaacl.vbs”脚本;所有声称拥有它的链接都已失效。它也应该由上面链接的 IIS 资源工具包工具安装,但我在服务器上的任何地方都找不到它。

    如果你能在某个地方找到可以像这样执行上述步骤的地方:

    cscript metaacl.vbs IIS://LOCALHOST/SMTPSVC %computername%\IIS_IUSRS R
    cscript metaacl.vbs IIS://LOCALHOST/SMTPSVC/1 %computername%\IIS_IUSRS R
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      • 1970-01-01
      • 2014-05-23
      • 1970-01-01
      相关资源
      最近更新 更多