【发布时间】: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