如何使用AT命令发送未来的电子邮件

时间:2010-12-31 00:43:41

标签: php email cron schedule at-job

我只需要在将来发送一个电子邮件,因此我认为我最擅长使用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 ...我不喜欢,但我可以忍受它。

1 个答案:

答案 0 :(得分:1)

你基本上在做什么

mail | at

将邮件的输出传递给at命令。这是不正确的。 mail命令将立即执行,输出(通常没有,除非有警告)将被安排在你指定的任何时间运行。

您的脚本应将邮件命令转储到文件中,然后在

上执行exec()
at whenver < mailcmd.sh