ASP Classic,通过查询和发送电子邮件循环

时间:2016-02-11 20:31:17

标签: while-loop asp-classic recordset cdo.message

我正在尝试遍历数据库查询并将电子邮件发送到我从查询中获得的电子邮件地址。 这是我的一段代码。

do until rs.EOF
    Set myMail = CreateObject("CDO.Message")
    myMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 
    myMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") ="relay-hosting.secureserver.net"
    myMail.Configuration.Fields.Update
    myMail.Subject= subject
    myMail.From="something@Something.Something"
    myMail.To = rs("Email")
    myMail.HTMLBody = strMessage & "Some Message"
    myMail.Send
    Set myMail = Nothing
    rs.MoveNext
loop

我已经搜索并尝试了不同的解决方案而没有任何运气。 以下代码行似乎有问题,但我找不到什么

myMail.To = rs("Email")

在给出任何答案或建议之前,请记住,

  • 当我在CDO消息对象的“TO”属性中使用任何静态电子邮件地址时,此代码正常工作
  • 查询提供了准确的结果
  • 当我在CDO Message对象的“TO”属性中使用动态电子邮件(来自查询的电子邮件)时收到500内部服务器错误。我无法访问IIS以启用详细的错误消息。

1 个答案:

答案 0 :(得分:2)

嗯,正如其他人在评论中所观察到的那样,没有实际的错误信息,很难说。有许多可能的来源:

  • 由于某种原因,此时记录集已关闭
  • 记录集中没有“电子邮件”字段
  • 电子邮件地址无效
  • ...

好处是,您可以使用经典的ASP错误处理来查找如下错误:

on error resume next

do until rs.EOF
    Set myMail = CreateObject("CDO.Message")
    myMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 
    myMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") ="relay-hosting.secureserver.net"
    myMail.Configuration.Fields.Update
    myMail.Subject= subject
    myMail.From="something@Something.Something"
    myMail.To = rs("Email")
    myMail.HTMLBody = strMessage & "Some Message"
    myMail.Send

    if err then
        Response.write "<code>" & err.Source & " - " & err.Description & "</code>"
    end if

    Set myMail = Nothing
    rs.MoveNext
loop

on error goto 0

当然,有更好的方法来处理这些错误,即使在传统的ASP(search SOthis solution)中也是如此。这只是为了帮助您在无权访问IIS设置时找到错误。