ASP 经典,循环查询和发送电子邮件

ASP Classic, Looping through query and sending emails

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

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")

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

好吧,正如其他人在评论中观察到的那样,如果没有实际的错误消息,很难说清楚。有许多可能的来源:

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

好处是,您可以使用经典的 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 SO or see this solution) 中也是如此。这只是为了在您无权访问 IIS 设置时帮助您查找错误。

我曾经遇到过类似的问题,发现它是由错误的电子邮件地址引起的,他们的服务器响应错误。该错误打破了循环。将未使用的电子邮件地址排除在数据库之外是不可能的,因此为了解决这个问题,我简单地添加了 On Error Resume Next

ObjSendMail.To = "Me <my@example.com>"
ObjSendMail.Subject = strSubject
ObjSendMail.From = strFromName & " <no-reply@example.com>"
ObjSendMail.ReplyTo = strFromName & " <" & strFromEmail & ">"
ObjSendMail.BodyPart.Charset = "UTF-8"
ObjSendMail.TextBody = strEmailBody  
ObjSendMail.TextBodyPart.Charset = "UTF-8"
On Error Resume Next
ObjSendMail.Send
Set ObjSendMail = Nothing

那么例行程序是否在任何更多失败的电子邮件上运行都无关紧要,因为它会忽略它们并转到下一封电子邮件。