我只需要在将来发送一个电子邮件,因此我认为我最擅长使用at
而非使用cron
。这就是我到目前为止所拥有的,它的凌乱和丑陋,并没有那么好逃脱:
<pre>
<?php
$out = array();
// Where is the email going?
$email = "you@gmail.com";
// What is the body of the email (make sure to escape any double-quotes)
$body = "This is what is actually emailed to me";
$body = escapeshellcmd($body);
$body = str_replace('!', '\!', $body);
// What is the subject of the email (make sure to escape any double-quotes)
$subject = "It's alive!";
$subject = escapeshellcmd($subject);
$subject = str_replace('!', '\!', $subject);
// How long from now should this email be sent? IE: 1 minute, 32 days, 1 month 2 days.
$when = "1 minute";
$command= <<<END
echo "
echo \"$body\" > /tmp/email;
mail -s \"$subject\" $email < /tmp/email;
rm /tmp/email;
" | at now + $when;
END;
$ret = exec($command, $out);
print_r($out);
?>
</pre>
输出应该是
警告:将使用/ bin / sh执行命令
2010年12月30日星期四19:39:00工作60
但是我对exec做错了而没有得到结果?
主要的是这看起来非常混乱。 还有其他更好的方法吗?
PS:我必须将apache的用户(我的www-data)添加到/etc/at.allow ...我不喜欢,但我可以忍受它。
答案 0 :(得分:1)
你基本上在做什么
mail | at
将邮件的输出传递给at命令。这是不正确的。 mail命令将立即执行,输出(通常没有,除非有警告)将被安排在你指定的任何时间运行。
您的脚本应将邮件命令转储到文件中,然后在
上执行exec()at whenver < mailcmd.sh