0

我有一个系统,每天早上都会为我和我的客户发送电子邮件。这个过程是通过 iframe 访问我的网站自动触发的。

通常,我会收到两次相同的电子邮件。

我在 MySQL 数据库上创建的用于控制这一点的简单过程如下:

运行此查询:

选择客户发送我的电子邮件

SELECT name, email FROM clients WHERE DATE_FORMAT(lastsend, '%d/%m/%y') <> DATE_FORMAT(now(), '%d/%m/%y')

发送邮件功能

我使用 vb.net 发送电子邮件

发送所有电子邮件后更新表客户端

UPDATE clients SET lastsend = Now();

我需要一种方法来锁定它,以防止在同一天多次发送相同的电子邮件。

谢谢,

4

1 回答 1

1

你所拥有的是一个竞争条件。有很多方法可以解决这个问题,有些方法比其他方法更强大。“稳健”意味着保证永远不会有重复的电子邮件。

这是一个简单的方法。在表中添加第二个日期列:SendStart。您尝试发送电子邮件并将 WHERE 子句更改为:

WHERE DATE_FORMAT(lastsend, '%d/%m/%y') <> DATE_FORMAT(now(), '%d/%m/%y') and
      DATE_FORMAT(sendstart, '%d/%m/%y') <> DATE_FORMAT(now(), '%d/%m/%y')

您仍然可以在第一个查询和第二个查询之间获得竞争条件。但是,时间跨度要小得多,因此可能性要小得多。

最后,您将同时记录电子邮件的发送时间和是否发送(除非发送成功,否则不要设置 lastsend)。您可以对不成功的电子邮件进行批量报告和错误处理。

于 2012-09-08T16:50:36.717 回答