我创建了一个记录到数据库中并通过电子邮件发送的表单。该表格允许自己每天完成一次,并且仅在数据库中记录一次。
我注意到有时表格会两次到达电子邮件收件箱。
为阻止这种情况,我创建了一个变量并将其初始化为0。然后,仅当变量为0时,我才允许代码执行send命令。一旦执行send命令,便将变量设置为1。 / p>
Session("sent") = 0
If Session("sent") = 0 Then
smtp.Send(mail)
Session("sent") = 1
End If
这不能有效地阻止电子邮件两次到达。奇怪的是,双重发送正在发生随机的人。我想知道发送电子邮件所花费的秒数或2是否足以使人们第二次单击“发送”按钮,从而导致第二次通过电子邮件发送表单。也许我可以在单击表单后禁用表单上的“提交”按钮。听起来像是一个好的解决方案?我还能尝试什么?
答案 0 :(得分:0)
您说数据仅一次到达数据库;具有从数据库中获取数据,发送电子邮件并使用一些新值更新数据库的过程,以跟踪已针对该数据发送了电子邮件
大多数db允许您自动执行类似的操作;您可以让您的数据库将email_status从未发送状态更新为处理状态,然后将数据返回发送给您-这样就无法运行两次。也许像这样:
UPDATE data
SET email_status = 'sending'
OUTPUT inserted.subject, inserted.body
WHERE datecol = @date and email_status = 'notsent'
每天只运行一次。
您可能会发现有人双击提交按钮,在几乎同时完成的并行线程上发起两个请求,而且彼此之间的数据查看得还不够快,以至于他们不知道电子邮件已经发送了>