PHP的Cronjob自动提醒电子邮件

纳迦好奇

我建立了一个Web应用程序,用户需要支付1/3/6个月的费用并加入该网站,我需要在用户帐户到期15天之前向该用户发送提醒邮件,我该如何实现?我不了解正确的逻辑...我正在将注册日期,到期日期存储在数据库中,这种下面的逻辑可以正常工作吗?

<?php
$expiringDate = "2015-07-21";
$todaydate = date("Y-m-d");
$date = date("Y-m-d",strtotime("-15 days", strtotime($expiringDate)));
if($todaydate == $date){
//send mail
}else{
//quit
}?>

而且如果今天即将到期,我也想更改数据库中的值...是在其他cronjob中执行还是更好,还是可以在上述代码中执行此操作?

 <?php
$expiringDate = "2015-07-21";
$todaydate = date("Y-m-d");
$date = date("Y-m-d",strtotime("-15 days", strtotime($expiringDate)));
if($todaydate == $date){
//send mail
}else{
//check and change the value if today is the expiring
    }?>

我走的路正确吗?这是否安全?是否还有其他更好的方法可以完成这项工作?

胡萝卜先生

我建议每天执行cron工作。

然后,您的PHP脚本应检查15天后到期的所有人员。

但是,正如其他人指出的那样,如果您的Cron工作有一天失败了,您可能会错过一批人。

因此,我将检查剩余15天或少于15天的人员,这些人员在您的数据库中没有针对他们设置提醒标记。这意味着如果cron作业对于剩余15天的某人失败,那么在剩余的14/13/12等天,您的脚本将看到未针对他们设置提醒标志,并且仍将发送提醒。

<?php
$reminderSent = false; // Get this value from the db (true or false)
$expiryActioned = false; // Get this value from the db (true or false)
$expiringDate = strtotime('2015-07-21'); // Get this date from the db
$todayDate = time();
$reminderDate = strtotime("-15 days", $expiringDate);
if ($todayDate >= $reminderDate && $reminderSent == false) {
    // Send mail
    // Set flag $reminderSent in database to indicate reminder has been sent
} elseif ($todayDate >= $expiringDate && $expiryActioned == false) {
    // Do something
    // Set $expiryActioned in database to indicate the user has expired and something has been done about it
}
?>

但是,与其选择所有人并使用上述逻辑遍历所有逻辑,不如将上述逻辑构建到您的SQL查询中以提高效率。

快速示例:

// Select all users that expire in 15 days or less
SELECT `userid`, `name`, `email` FROM `user` WHERE NOW() >= DATE_SUB(`expiry`, INTERVAL 15 DAY) AND reminder_sent = 0

// Now loop through each user, send them an email and then:
UPDATE `user` SET reminder_sent = 1 WHERE `userid` = X

// Select all users that have expired
SELECT `userid`, `name`, `email` FROM `user` WHERE NOW() >= `expiry` AND `expiry_actioned` = 0

// Now loop through each user, do whatever you need to and then:
UPDATE `user` SET expiry_actioned = 1 WHERE `userid` = X

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PHP的Cronjob自动提醒电子邮件

来自分类Dev

如何自动发送电子邮件作为提醒

来自分类Dev

如何自动发送电子邮件作为提醒

来自分类Dev

根据日期发送提醒电子邮件

来自分类Dev

openerp电子邮件线索提醒:1

来自分类Dev

自动电子邮件回复

来自分类Dev

发送自动电子邮件

来自分类Dev

电子邮件自动响应

来自分类Dev

PHP-自动下载HTML电子邮件中的图像

来自分类Dev

PHP表格自动发送电子邮件

来自分类Dev

定时电子邮件提醒,如果/其他

来自分类Dev

如何通过代码发送电子邮件提醒

来自分类Dev

Laravel使用Mailables发送生日提醒电子邮件

来自分类Dev

没有电子邮件的提醒管理员

来自分类Dev

使用 Laravel 在特定日期发送提醒电子邮件

来自分类Dev

如何使用 PHP 的 imap 函数和 cronjob 阅读电子邮件

来自分类Dev

php电子邮件域名

来自分类Dev

空白的PHP电子邮件

来自分类Dev

电子邮件验证php

来自分类Dev

PHP - 电子邮件错误

来自分类Dev

PHP电子邮件表单拍摄空白电子邮件

来自分类Dev

Jenkins基于电子邮件自动构建

来自分类Dev

自动附加电子邮件iOS

来自分类Dev

电子邮件的jQuery自动完成

来自分类Dev

Outlook VBA电子邮件自动保存

来自分类Dev

AMP电子邮件图像自动加载?

来自分类Dev

自动电子邮件发件人

来自分类Dev

使用SQL自动生成电子邮件

来自分类Dev

Bugzilla自动电子邮件设置文件