Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用AT命令发送未来的电子邮件_Php_Email_Cron_Schedule_At Job - Fatal编程技术网

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

Php 如何使用AT命令发送未来的电子邮件,php,email,cron,schedule,at-job,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)

我只需要在将来发送一封电子邮件,所以我想我最好使用
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>

你基本上做得很好

at whenver < mailcmd.sh
这将把邮件的输出传输到at命令。这是不正确的。mail命令将立即执行,输出(通常为空,除非有警告)将被安排在您指定的任何时间运行

脚本应该将邮件命令转储到一个文件中,然后对其执行exec()

at whenver
他实际上是在用外部回音编写完整的mailcmd。但无论如何,组合一个单独的脚本似乎是一个更好的方法。两者都很混乱,但我觉得这对我来说更具可读性。另外,我正在回显将在以后运行的命令,这些命令将仅在执行时创建temp。您的想法是将命令存储到一个文件中,将文件加载到at,然后删除临时文件。我将tmp文件的创建/删除包括在echo中。您确定
exec()
工作正常吗?尝试打印exec('echo 1')以测试您不是安全模式受害者。否则,请添加
2>&1
,查看shell是否因语法过长而抱怨。还可以尝试创建一个临时shell脚本来读取,并使用单引号作为内部回音。我还关闭了安全模式。
at whenver < mailcmd.sh