我正在使用php脚本发送一封我希望在延迟一段时间后发送的电子邮件。我将使用sleep()
。但是,我会在哪里推迟发送电子邮件?这是我的代码:
<?php
if(isset($_POST['email']))
{
$headers = "From: Memory Jet <your_company@example.com>\r\n";
$to_visitor = $_POST["email"];
$common_data = $_POST["message"];
//I originally put the delay here, it didn't work
mail($to_visitor, "Your Memory", $common_data, $headers);
} ?>
提前致谢! =)-Ben
答案 0 :(得分:4)
两个问题:1)你的意思是“它不起作用”;它做了什么? 2)为什么要在发送电子邮件之前等待很长时间?
另外,我强烈建议您不要在PHP脚本中调用sleep()
,因为它会延迟脚本的完成,从而延迟浏览器的HTML。
我会实现更强大的电子邮件排队系统。基本上,您不是在脚本中发送电子邮件,而是在数据库中插入一行,该数据库包含要发送的电子邮件队列。然后,您有一个cron
或其他后台进程,定期检查数据库中是否有要发送的电子邮件,然后批量发送。
此外,您可以在表格中指定“待发送时间”,发件人脚本不会发送任何电子邮件,直到当前时间在“待发送时间”之后。
sleep()的问题是PHP脚本启动,执行,然后就消失了。为了在(相对)遥远的未来做某事,你需要某些东西。 cron
只是一个例子。您可以在Windows任务计划程序中使用某些内容(您没有提及目标平台),也可以编写自己的程序。用C语言(甚至是PHP)写一些不断运行,检查数据库和发送电子邮件的东西并不是很多工作。
答案 1 :(得分:0)
我正在使用php脚本发送一封我希望在延迟一段时间后发送的电子邮件。我将使用sleep()。
别。如果在用户触发的脚本中执行此操作,则会延迟用户的最终页面呈现,直到睡眠调用完成。它还会在一段时间内占用Apache服务器工作者。如果你负载很重,延迟10秒,那么你最终可能会在互联网上使用DOS。此外,如果用户在延迟结束之前关闭页面,则永远不会发送电子邮件。
使用cron或守护进程执行此操作。