我想让我的服务器根据我的网络托管提供商的服务器数据库中的生日日历向我发送带有生日提醒的e-mails
。我知道如何从PHP
发送e-mails
,但这只是在客户端单击按钮后的操作。这也是我能找到的执行动作的唯一方法。
如何让我的服务器在没有用户交互的情况下在特定的date/time
上向我发送e-mail
?
编辑
我不认为我的问题是重复的。假定的重复链接指的是一个关于cron的问题,答案是关于语法的,但它没有解释cron是如何工作的,也没有解释我如何使用它来解决我的问题。
您可以编写一个php脚本,以便在命令行上执行。要从命令行运行php脚本,只需使用php
命令:
php myscript.php
在本例中,如果myscript.php
具备发送电子邮件的所有逻辑,那么您只需设置一个cron作业,每天或每小时自动执行该文件(无论您希望它执行的频率如何)。然后,您所需要做的就是在PHP脚本中编写逻辑,以检查是否到了发送这些电子邮件的"时间"。
这篇文章的答案对为php脚本设置cron作业有很好的解释。
详细说明Apb给出的注释;
- 使用内容创建php文件(脚本部分为按钮)
- 将cron用于linux操作系统,或者如果您在windows上执行php脚本
另一个选项是由Santosh Achari在此处输入链接描述问题上回答的setcronjob.com
正如其他人所说,cronjobs是实现这一目标的好方法。
例如(非常初级)script.php
include '../connect.php';
$birthday_list =[];
$today = date("m.d.y");
try {
$sql = "SELECT `Birthday`, `Name`, `Surname`, FROM `Friends` WHERE Friends.Birthday = '$today'";
foreach ($conn->query($sql) as $row) {
$temp = [$row['Birthday'],$row['Name'],$row['Surname']];
$birthday_list[] = $temp;
}
}
catch(PDOException $e)
{
echo "Connection failed: " . $e->getMessage();
}
foreach ($birthday_list as $el){
$name = $el[1];
$surname = $el[2];
$message = 'Todays is'.$name.' '.$surname.' birthday';
mail('me@example.com', 'My Subject', $message);
}
然后,您可以将此脚本作为cronjob运行,一些主机(例如godaddy)允许您从cpanel设置crons,否则您必须从服务器shell设置crons。