Как отправить будущее электронное письмо с помощью AT-команды - PullRequest
2 голосов
/ 31 декабря 2010

Мне просто нужно отправить одно электронное письмо в будущее, поэтому я решил, что лучше использовать at вместо cron. Это то, что я имею до сих пор, это грязно и некрасиво и не так уж хорошо сбежать:

<code><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);
?>

На выходе должно быть что-то вроде


предупреждение: команды будут выполняться с использованием / bin / sh
работа 60 Чт 30 декабря 19:39:00 2010

Однако я что-то не так делаю с exec и не получаю результат?

Главное, это кажется очень грязным. Есть ли альтернативные лучшие методы для этого?

PS: мне пришлось добавить пользователя apache (для меня www-данные) в /etc/at.allow ... Что мне не нравится, но я могу с этим смириться.

1 Ответ

1 голос
/ 31 декабря 2010

Вы делаете в основном

mail | at

, который будет направлять вывод почты в команду at.Это неверноКоманда mail будет выполнена немедленно, и вывод (обычно ничего, если не было предупреждения) будет запланирован для запуска в любое указанное вами время.

Ваш сценарий должен сбросить команды почты в файл, а затемсделать exec () на

at whenver < mailcmd.sh
...