Как отправить будущее электронное письмо с помощью команды
Вопрос
Мне просто нужно отправить один электронная почта в будущее, поэтому я решил, что я буду лучше использовать 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
Работа 60 в Че -Черт 30 декабря 19:39:00 2010
Однако я делаю что -то не так с Exec и не получаю результат?
Главное, что это кажется очень грязным. Есть ли альтернативные лучшие методы для этого?
PS: Мне пришлось добавить пользователя Apache (www-data для меня) в /etc/at.allow ... что мне не нравится, но я могу жить с ним.
Решение
Вы делаете в основном
mail | at
который будет выходить из команды AT. Это неверно. Команда Mail будет выполняться немедленно, и вывод (обычно ничего, если не было предупреждения) будет запланирован на то, в любое время вы указали.
Ваш скрипт должен допустить команды почты в файл, а затем сделать exec () на
at whenver < mailcmd.sh