【问题标题】:How to send only email once after X amount of time如何在 X 时间后只发送一次电子邮件
【发布时间】:2019-06-03 15:31:08
【问题描述】:

我正在制作一个 PHP 警报通知,如果达到温度设定点,它将发送一封电子邮件。

我有每 1 分钟运行一次的 CRONJOB,运行一个 PHP 脚本来验证温度,如果温度达到某个点,它会向我发送电子邮件通知。

问题是,由于 CRONJOB,当温度超过设定点时,它会每分钟向我发送一封电子邮件通知。我希望它只给我发一封电子邮件。一分钟不发送。

我正在使用 MYSQL 来存储警报信息。如果我需要一些如何在 mysql 中设置时间戳并让脚本验证时间并在 x 时间内发送它。?

谢谢,

【问题讨论】:

  • 是的 - 时间戳或日期时间都可以。在您的应用程序代码中,您将检查当前时间是否 >= (last_notification_time + your_chosen_duration)。

标签: php mysql cron


【解决方案1】:

您可以在应用程序代码中或直接在数据库中进行计算。 这是一些伪代码。

应用程序代码

CONST NOTIFICATION_DURATION = '30 minutes';

$mostRecentNotification = query('SELECT MAX(created_at) FROM notifications');

// Notice we're doing the calculation in our application code.
$nextAvailableNotification = $mostRecentNotification + NOTIFICATION_DURATION;

if (current_time >= $nextAvailableNotification) {
    send_notification();
}

如果您选择使用应用程序代码版本,我强烈建议您使用像 Carbon (https://carbon.nesbot.com/) 这样的库来帮助您进行日期/时间运算。即使像这样简单的计算,它也确实是一个救生员。

数据库版本

CONST NOTIFICATION_DURATION = '30 minutes';

// Notice we're doing our calculation in our database
$nextAvailableNotification = query('SELECT MAX(created_at) + INTERVAL ' . NOTIFICATION_DURATION . ' FROM notifications');

if (current_time >= $nextAvailableNotification) {
    send_notification();
}

您可以通过直接在查询中进行比较来进一步压缩数据库版本,但我将由您决定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多