2011-08-08 194 views
0

我在ASP网站上做了一些维护,并发现它发送重复的电子邮件。我无法弄清楚它是如何做到这一点的。我在这里粘贴了代码 http://pastebin.com/Beb94PiCASP发送重复电子邮件

在线443上是函数SendMsg2。据我可以告诉该函数只被调用一次。任何警报或消息只会出现一次。

当电子邮件被发送的objMessage.TO = EMAIL1进来一次,然后没有出现在任何第二个电子邮件。我在想,无论是让它运行两次也是清除变量。

感谢您的帮助。

回答

0

副手,我没有看到任何令人担忧的事情,我可以简单地用手指帮助。解决ASP问题的最好办法是二渠道之一:

  1. 封装在一个VB COM组件的逻辑
  2. 用Response.write

个人,VB COM是对大量的开销遗留应用程序。虽然它允许更好的仪器,但你必须写很多代码。除非这个应用的保质期比目前的应该更长,否则不是最好的选择。那离开#2。

Response.Write进入和退出每个例程。然后查看打印出的流程,并确定第二次调用邮件例程的位置。如果这样做什么都不做,那么它可能是用户多次点击按钮(不耐烦的用户)。如果后者,你应该做一个按钮禁用。以跟踪下来

一种方式是一个“会话ID”加进来。重构邮件例程以接受一个id值,然后你可以编写“如果会话ID,然后不发送电子邮件”混合。在第一封电子邮件发送后,ID会被储存起来,任何额外的电话都会看到已经存在的ID。我说引号中的会话id,因为你们都必须使用session的概念和初始流程的概念来覆盖用户错误(多次点击)和代码流错误。如果您可以在一个会话中发送多封电子邮件,则需要保留某种类型的“我在此会话中发送此电子邮件”的值,因此您不会添加不发送电子邮件的错误。

您应该花时间纠正流程并纠正用户错误。但请花时间先排查问题,以便了解是否还有其他任何工件。仅在传统的ASP代码中,这意味着将值写入响应流(非常粗糙,就像手推式割草机?)。

+0

我已经做了一个response.write,在邮件功能,它只输出一次。我能够每次重现此问题而不会失败,所以我知道这不是按钮被双击的情况。我甚至尝试删除邮件功能,并将电子邮件代码放在邮件被调用的地方,并且它仍然运行两次。这是网站http://www.cpi-ontario.com/memberships/signup.asp 我打算尝试做会话ID,听起来像它会解决它。但是,知道它为什么运行两次真的很好。 – Adam

+0

行,所以我分裂的形式进入两页,现在也没有机会运行两次。它仍然发送2封电子邮件。所以不知何故电子邮件功能必须有错误。 – Adam

+0

或者服务器配置有错误。它可能会在成功后被重试。或者在重新处理之前不清除已发送的消息。你必须涵盖两种情况。如果您每个会话只发送一次,或每个会话类型的电子邮件发送一次,它将解决您的问题。总是很高兴知道为什么,但我发现遗留编程方法论为什么会带来收益递减。 –

1

你的功能被命名为“SendMsg2”,但在478线设置

SendMsg = objMessage.Send 

或许有一定的副作用,当功能SENDMSG存在。