Назад | Перейти на главную страницу

Как отправить почту через конвейер командной строки

У меня есть команда cron, которая запускает файл, и я пытаюсь настроить вывод, чтобы он отправлял мне электронное письмо. Я использую это со сторонними скриптами, которые я не хочу изменять в прямых файлах, поэтому мне нужно передать вывод вместо изменения PHP.

Я перехожу с сервера, который использует mail на сервер, который использует sendmail. Я изо всех сил пытаюсь выяснить, как правильно отправить тему в sendmail через командную строку.

/usr/local/bin/php -f /path/to/file.php 2>&1 | /usr/sbin/sendmail -s "My Test Email Subject" test@email.com

В моих системах Debian (в которых есть Exim, а не «настоящий» sendmail, но все еще есть двоичный файл sendmail для совместимости), когда я хочу отправить почту из сценария, я делаю что-то эквивалентное:

cat <<EOF | sendmail -t
To: recipient@example.com
Subject: Testing
From: sender@example.com

This is a test message
EOF

Обратите внимание, что пустая строка важна.

/ usr / sbin / sendmail

Это неверно.

Вы должны иметь mail командовать где-нибудь. Это можно было бы назвать mailx. Должен быть в /bin/ каталог. Как правило, скрипты php никогда не должны ничего вызывать в /sbin или /usr/sbin. Программы sbin обычно предназначены для root.

Кроме того, php имеет встроенный почтовая функция.

echo -e "This is my body\nSecond line" 2>&1 | sed '1!b;s/^/To: test@email.com\nSubject: My Test Email Subject\n\n/' | sendmail -t

echo = Тело электронного письма.
sed stuff = Применяет заголовки электронной почты и важную двойную строку между телом и заголовками.
sendmail -t = Передает его напрямую через sendmail.

php -f file.php 2>&1 | sed 's/^/To: test@email.com\nSubject: My Test Email Subject\n\n/' | sendmail -t