Asp classic ASP发送重复电子邮件

Asp classic ASP发送重复电子邮件,asp-classic,Asp Classic,我在一个ASP网站上做一些维护,发现它正在发送重复的电子邮件。我不知道它是怎么做到的。我已经把代码贴在这里了 第443行是函数SendMsg2。据我所知,这个函数只调用了一次。任何警报或消息只出现一次 发送电子邮件时,objMessage.TO=email1会出现一次,然后不会出现在任何第二封电子邮件上。我认为,无论是什么让它运行两次,都是在清除变量 谢谢你的帮助。马上,我看不到任何能让我伸出一根手指来帮忙的东西。解决ASP问题的最佳方法是以下两种途径之一: 将逻辑封装在VB COM组件中 使

我在一个ASP网站上做一些维护,发现它正在发送重复的电子邮件。我不知道它是怎么做到的。我已经把代码贴在这里了

第443行是函数SendMsg2。据我所知,这个函数只调用了一次。任何警报或消息只出现一次

发送电子邮件时,objMessage.TO=email1会出现一次,然后不会出现在任何第二封电子邮件上。我认为,无论是什么让它运行两次,都是在清除变量


谢谢你的帮助。

马上,我看不到任何能让我伸出一根手指来帮忙的东西。解决ASP问题的最佳方法是以下两种途径之一:

  • 将逻辑封装在VB COM组件中
  • 使用Response.Write
  • 就个人而言,VB COM对于遗留应用程序来说是一个很大的开销。虽然它允许更好的插装,但您必须编写大量代码。除非应用程序的保质期比现在长得多,否则这不是您的最佳选择。剩下#2

    响应。写入每个例程的入口和出口。然后,您可以看到打印出来的流程,并确定第二次调用邮件例程的位置。如果这不起作用,那么可能是用户多次单击按钮(不耐烦的用户)。如果是后者,则应禁用按钮

    追踪事情的一种方法是在混合中添加“会话id”。重构邮件例程以接受id值,然后您可以将“如果会话id,那么就不要发送电子邮件”编码到混合代码中。在发送第一封电子邮件后,该ID将被存储,任何其他呼叫都将看到该ID已在混合中。我用引号表示会话id,因为你们都必须使用会话和初始流的概念来涵盖用户错误(多次单击)和代码流错误。如果您可以在一个会话中发送多封电子邮件,则需要在混合中保留某种类型的“我在此会话中发送了此电子邮件”值,这样您就不会在混合中添加不发送电子邮件的错误

    您应该花时间来纠正流和用户错误。但是首先花点时间进行故障排除,这样您就可以查看是否存在任何其他工件。仅在经典ASP代码中,这意味着将值写入响应流(如此粗糙,如手动推式割草机?)。

    您的函数名为“SendMsg2”,但在第478行中设置了

    SendMsg = objMessage.Send
    

    当函数SendMsg存在时,这可能会产生一些副作用。

    我在mail函数中做了一个response.write,它只输出一次。我每次都能重现这个问题,所以我知道这不是双击按钮的情况。我甚至尝试删除邮件功能,将电子邮件代码放在调用邮件的地方,但它仍然运行了两次。这是我将要尝试的网站,并做会话ID,听起来它将修复它。但是如果知道为什么要运行两次,那就太好了。好吧,我把表单分成两页,现在不可能运行两次了。它仍在发送2封电子邮件。因此,电子邮件功能一定有错误,或者服务器配置有错误。成功后,它可能会在重试场景中被捕获。或者在重新处理之前未清除已发送的消息。你必须涵盖这两种情况。如果每个会话只发送一次,或者每个会话每种类型的电子邮件发送一次,那么它将解决您的问题。总是很想知道为什么,但我发现在传统编程方法上找出原因的回报会越来越小。