php - 每 X 分钟使用 SwiftMailer (PHP) 发送一封电子邮件
问题描述
我可以通过在客户端进入特定页面时发送电子邮件来使我的代码工作,问题是如果用户/客户端重新加载页面,则会发送一封新电子邮件,这可能导致从我的 smtp 服务器发送数百封邮件.
我正在寻找一个简单的替代方案,它只能每 5/10/15 分钟发送一封验证电子邮件。不是当用户重新加载页面时。
我应该使用 javascript 还是对该函数进行简单的睡眠会起作用。
PD:电子邮件是通过$_SESSION
php 上的变量发送的。
解决方案
您可以为此使用 cron 作业(如果您的托管环境允许您定义一个),或者跟踪您上次自己发送电子邮件的时间。
在后一种情况下,您可以例如执行以下操作:
/**
* Get the current date & time.
*
* @return String
*/
function now() {
return date('Y-m-d H:i:s');
}
/**
* Store last send date. For the sake of simplicity, let's
* write it to a file.
*
* @return String
*/
function last_send_update($date) {
file_put_contents('mails_last_send.json', json_encode(['date' => $date]));
}
/**
* Get last send date from a file.
*
* @return String
*/
function last_send_get() {
if (!file_exists('mails_last_send.json')) {
last_send_update(now());
}
return json_decode(file_get_contents('mails_last_send.json'))->date;
}
/**
* Mock sending mails.
*/
function send_mails() {}
// Do the actual math & decide what to do.
$last_send = date_create(last_send_get());
$now = date_create(now());
$diff = date_diff($now, $last_send)->i; // Difference in minutes
if ($diff >= 10) {
send_mails();
last_send_update($now);
}
有关 Cron 及其使用方法,请参阅:
推荐阅读
- java - 如何从 xml.gz 中提取 xml?
- c# - .net core 3.1将ajax对象列表发布到MVC控制器没有数据到达
- android - 使用 PKCS12 密钥签署 apk 时出错
- assembly - 适用于 gcc 但不适用于 clang 的汇编代码
- r - R如何过滤,删除和/或编辑不正确的观察
- google-sheets - 镜像列并更改行添加数字序列
- javascript - 如何使用 Javascript/CSS 照片库脚本(Ninja Slider/Menucool)解决纵横比/比例问题?
- spring-boot - 按钮的绑定方法 - thymeleaf
- html - 如何在html中使用百分比定位div
- python - 在python中的数据框中获取给定年份和周数的周末日期