Отправка почты из командной строки: пустое тело сообщения

Я почему-то не могу разобраться с этим. Я отправляю письма из командной строки с помощью небольшого скрипта. Но линия

echo 'LOREM IPSUM' | mail -s 'SUBJECT' -a 'From:TEST' < /root/recipients.txt

как-то, похоже, не так. Письмо отправлено, но без текста, и я получаю сообщение об ошибке

mail: Null message body; hope that's ok

Что я здесь не так делаю?

1 ответ

Решение

Вы пытаетесь перенаправить mailЭто из двух источников одновременно:

  1. Сначала у вас есть echo | mail, который связывает stdout echo с stdin почты (через pipe), заменяя стандартный stdin (терминал);
  2. Тогда у вас есть mail < recipients.txt, который привязывает файл к стандартному почтовому стандарту, заменяя все предыдущие перенаправления.

Важным моментом является то, что он не объединяет оба входа. Если вам нужно сделать это, используйте некоторую комбинацию cat и группировка команд:

  • (cat recipients.txt; echo 'Hello world') | mail -s ...

  • Баш-только: cat recipients.txt <(echo 'Hello world') | mail -s ...

Хотя в этом случае может быть лучше передать список получателей в качестве аргументов командной строки вместо ввода:

  • echo 'Hello world' | mail -s ... $(cat recipients.txt)
Другие вопросы по тегам