如何使用sleep来延迟PHP电子邮件

时间:2011-12-30 20:19:53

标签: php email delay

我正在使用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

2 个答案:

答案 0 :(得分:4)

两个问题:1)你的意思是“它不起作用”;它做了什么? 2)为什么要在发送电子邮件之前等待很长时间?

另外,我强烈建议您不要在PHP脚本中调用sleep(),因为它会延迟脚本的完成,从而延迟浏览器的HTML。

我会实现更强大的电子邮件排队系统。基本上,您不是在脚本中发送电子邮件,而是在数据库中插入一行,该数据库包含要发送的电子邮件队列。然后,您有一个cron或其他后台进程,定期检查数据库中是否有要发送的电子邮件,然后批量发送。

此外,您可以在表格中指定“待发送时间”,发件人脚本不会发送任何电子邮件,直到当前时间在“待发送时间”之后。

sleep()的问题是PHP脚本启动,执行,然后就消失了。为了在(相对)遥远的未来做某事,你需要某些东西cron只是一个例子。您可以在Windows任务计划程序中使用某些内容(您没有提及目标平台),也可以编写自己的程序。用C语言(甚至是PHP)写一些不断运行,检查数据库和发送电子邮件的东西并不是很多工作。

答案 1 :(得分:0)

  

我正在使用php脚本发送一封我希望在延迟一段时间后发送的电子邮件。我将使用sleep()。

别。如果在用户触发的脚本中执行此操作,则会延迟用户的最终页面呈现,直到睡眠调用完成。它还会在一段时间内占用Apache服务器工作者。如果你负载很重,延迟10秒,那么你最终可能会在互联网上使用DOS。此外,如果用户在延迟结束之前关闭页面,则永远不会发送电子邮件。

使用cron或守护进程执行此操作。