【问题标题】:CDO.Message.1 error '80070005' Access is denied.CDO.Message.1 错误“80070005”访问被拒绝。
【发布时间】:2011-02-28 16:20:16
【问题描述】:

当我尝试通过本地服务器发送时收到此错误

CDO.Message.1 error '80070005' 

Access is denied. 

/mail.asp, line xxx 

这是我正在使用的代码

  MailBodyText = "TEST"

  Set objNewMail = CreateObject("CDO.Message")
  objNewMail.To =  sSendTo
  objNewMail.From = "webmaster@EXAMPLE.com"
  objNewMail.Cc = "webmaster@EXAMPLE.com"
  objNewMail.Subject =  "Information Request & Feedback"
  objNewMail.HTMLBody = "The following information was sent from " & sEmail & ":" & "<br>" & CHR(13) & MailBodyText & "<br>copies of this mail we sent to :"& sSendTo
  objNewMail.Send

  Set objNewMail = Nothing 

似乎是 ISSUR 的权限错误,没有写入 mailroot/pickup 文件夹的写入权限。

但我们已经检查过,并且该站点使用的服务帐户似乎拥有权限。

问题是这个错误总是文件权限错误吗?

问题如何知道/设置 CDO 正在使用的位置?这样我们就可以确认权限了

还有什么办法可以解决这个问题?

【问题讨论】:

    标签: iis-7 asp-classic cdo.message


    【解决方案1】:

    如果您不想更改代码

    授予 IIS_IUSRS 组 对 c:\inetpub\mailroot\Pickup 文件夹或任何您的取件目录的写入权限。

    它必须是 IIS_IUSRS 组,而不是 IUSR 用户(您可能拼错了)。

    在blog.msdn.com 执行选项 3 中指定的步骤后,我收到此错误

    我不必更改 ASP 代码。您的代码在我的服务器上运行良好。

    【讨论】:

    • 这应该是公认的答案,因为这是Access Denied 消息的原因。 IIS_IUSRS 组包含服务器上每个站点的 ApplicationPoolIdentity 帐户,因此如果您在服务器级别配置此方法,则此方法效果很好。请记住,您的拾取文件夹将需要授予IIS_IUSRS 至少 modify 权限,否则您将继续收到错误。
    • 但是链接的文章是针对另一个错误 (Error:CDO.Message.1 (0x80040220) The "SendUsing" configuration value is invalid on IIS 7.5) 的,在这种情况下,将权限添加到 IIS metabase 将做 nothing 问题是拾取的文件夹权限文件夹。
    【解决方案2】:

    我正在将一些旧的经典 asp 站点迁移到一个新的(windows 2008R2)服务器,我遇到了“完全相同”的问题(至少同样的错误和基本相同的代码)。 Gaby 提出的解决方案:

    objNewMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 1
    objNewMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverpickupdirectory") = "c:\inetpub\mailroot\pickup"
    

    对我不起作用,我仍然有同样的错误。

    经过一番搜索,我发现了这个建议:

    myMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    myMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "localhost" 
    

    (不要设置 smtpserverpickup 目录)

    现在可以正常使用了。

    顺便说一句,如果您需要在 Windows 2008 服务器 (IIS7) 上设置必要的 SMTP 服务,我发现 this blog 非常有帮助。

    更新:

    根据microsoftsendusing = 1 使用 SMTP 服务器和 sendusing 2 使用 Outlook Express,我在服务器上查看过,似乎没有安装 Outlookexpress 或 windows 邮件,但这个设置对我仍然有效.如果有人能解释一下,我很想知道。

    【讨论】:

      【解决方案3】:

      使用允许身份验证和其他微调的.configuration 属性..

      示例:http://www.paulsadowski.com/wsh/cdo.htm

      更新

      .configuration 属性允许设置拾取目录(根据您的要求)

      objNewMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 1
      objNewMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverpickupdirectory") = "c:\inetpub\mailroot\pickup"
      objNewMail.Configuration.Fields.Update
      objNewMail.Send
      

      【讨论】:

      • 谢谢你,但我不想将邮件发送到远程服务器,只是让它在本地盒子上工作。
      • @Pbearne,可以通过.configuration属性设置取货目录(更新答案)
      • 感谢它在开发服务器上运行的额外代码示例,我讨厌将路径放入代码中。但我可以忍受它
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-26
      • 2010-10-24
      • 2012-12-21
      • 2010-12-23
      • 2017-06-25
      相关资源
      最近更新 更多