Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Windows 2008上的IIS 7.5中配置CDOSYS?_Windows_Iis_Windows Server 2008 R2_Windows Server 2003_Cdo.message - Fatal编程技术网

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

如何在Windows 2008上的IIS 7.5中配置CDOSYS?,windows,iis,windows-server-2008-r2,windows-server-2003,cdo.message,Windows,Iis,Windows Server 2008 R2,Windows Server 2003,Cdo.message,和你们很多人一样,我正在将一个传统的经典ASP应用程序从Windows2003服务器迁移到Windows2008。我有这个大部分工作,但我无法通过它发送电子邮件。这是因为CDOSYS配置不正确。尽管花了大约4-5个小时在谷歌上搜索和运行API文档,甚至搜索了文件系统和系统注册表上的所有文件,但我还是无法确定这是在哪里设置的 旧应用程序的ASP.NET部分工作正常。它能够在不进行身份验证的情况下将电子邮件发送到本地主机,然后通过具有身份验证的邮件服务器发送到目的地 为了方便起见,我将源代码中的VB

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

旧应用程序的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-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驱动器中搜索“\Pick”和“usemessageresponsetext”等短语,也没有发现任何信息。如果它们在某个位置,我猜它们在某个二进制数据存储中

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


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

我发现我能够帮助我们e我作为管理员登录时的Powershell脚本示例。从中进行的研究使我找到了一个解决该问题的方法。不幸的是,它现在导致一些死链接,这意味着它无法工作。但是,它有足够的提示来组合解决方案:

  • 下载并安装
  • 以管理员身份执行
    C:\ProgramFiles(x86)\IIS Resources\Metabase Explorer\MBExplorer.exe
  • 导航到
    /LM/SmtpSvc
    ,右键单击它并选择属性
  • 输入要授予访问权限的组。在我的示例中,用户和IIS_IUSR都具有只读访问权限
  • 导航到
    /LM/SmtpSvc/1
    ,并在此节点上设置相同的权限
  • 将对IIS\u IUSR和用户的读/写访问权限授予
    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
    
    cscript metaacl.vbs IIS://LOCALHOST/SMTPSVC %computername%\IIS_IUSRS R
    cscript metaacl.vbs IIS://LOCALHOST/SMTPSVC/1 %computername%\IIS_IUSRS R