2011-12-30 118 views
1

我正在使用php脚本发送一封电子邮件,我想在一段时间后发送邮件。我将为此使用sleep()。但是,我会在哪里推迟发送电子邮件?这里是我的代码:如何使用睡眠延迟PHP电子邮件

<?php  
if(isset($_POST['email'])) 
{ 

$headers = "From: Memory Jet <[email protected]>\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

把它放在'mail()'函数之前,它会睡觉。 – 2011-12-30 20:22:03

+0

我会再试一次 – 2011-12-30 20:23:40

回答

4

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

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

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

此外,你可以指定一个表中的“待发送时间”,并且发件人脚本不会发送任何电子邮件,直到当前的时间是“待发送时间”之后。

睡眠()荷兰国际集团的问题是,PHP脚本会调用,执行,然后走了。为了在相对遥远的未来做些事情,你需要其他的东西cron只是一个例子。你可以在Windows任务调度器中使用某些东西(你没有提到目标平台),或者编写你自己的程序。用C语言(或者甚至PHP)不断地运行,检查数据库和发送电子邮件,这并不是一个很大的工作。

+0

脚本没有加载。我也来试试吧,我再次认为这是一个错误 – 2011-12-30 20:24:41

+0

http://www.kirupa.com/forum/showthread.php?301942-Insert-time-delay-into-mail-sending – DGund 2011-12-30 20:25:46

+1

@DevinGund啊,模仿真实的人的延迟。这是有道理的:-) – 2011-12-30 20:28:01

0

我使用PHP脚本来发送,我想时间延迟后发送电子邮件。我将为此使用sleep()。

不要。如果您在用户触发的脚本中执行此操作,则会延迟用户的最终页面呈现,直到完成睡眠呼叫。它也会在整个时间内绑定一个Apache服务器工作者。如果你有很重的负载和10秒的延迟,你可以结束自己的互联网。另外,如果用户在延迟结束之前关闭页面,则电子邮件将永远不会被发送。

使用cron或者守护进程来做到这一点。

+0

不是真的!脚本在用户关闭页面后继续运行! – Alexxus 2013-08-29 11:12:08

+0

@Alexxus一般来说,没有。 http://php.net/manual/en/function.ignore-user-abort.php – ceejayoz 2013-08-29 13:46:25

+0

垃圾!你是对的!对不起!我以为它是默认开启的.. – Alexxus 2013-08-29 14:16:32