Как заставить crontab отправить мне электронное письмо с выводом?

Как я могу заставить crontab отправить мне электронное письмо с результатами своих заданий? У меня есть MAILTO=redacted@yahoo.com.au выше рабочих мест, но это не работает.

Я знаю, что мне нужно использовать что-то вроде Postfix или Sendmail, но, хоть убей, я не могу понять, как этого добиться. Я искал и искал простое руководство по настройке Postfix, но все они безумно сложны и ожидают, что вы настроите целый сервер для отправки и получения электронной почты и будете знать все термины (например, что такое доменное имя для исходящих электронных писем?).

Все, что я хочу сделать, это попросить crontab написать мне по электронной почте. Почему это так сложно??

Дополнительная информация:

Мой файл crontab выглядит следующим образом:

MAILTO=redacted@yahoo.com.au1 0 * * * ~/Desktop/toskymesh.sh59 6 * * * ~/Desktop/tooptus.sh0 3 * * * snapraid sync

Дополнительная Дополнительная Информация:

Выход из ps -ef | grep '[s]endmail'

root 6840 1370 0 10:26 ? 00:00:00 sendmail: MTA: accepting connections

Я точно знаю, что cron работает, но я тестирую команду mail с помощью echo Test | mail -s Test redacted@yahoo.com.au в любом случае.

В конце концов я использовал sSMTP. Это намного, намного проще, чем любой из них. Postfix или sendmail и прекрасно справляется со своей работой.

Для дальнейшего использования, вот как использовать sSMTP с Yahoo Mail (не волнуйтесь, это гораздо менее сложно, чем кажется):

  • Используйте Synaptic для загрузки ssmtp. В качестве альтернативы вы могли бы запустить sudo apt-get install ssmtp.

  • Откройте конфигурационный файл по адресу /etc/ssmtp/ssmtp.conf.

  • Сделайте так, чтобы конфигурация выглядела следующим образом:

    root=[yourRealEmail@yahoo.com.au]mailhub=smtp.mail.yahoo.com:587FromLineOverride=YESUseSTARTTLS=YESAuthUser=[yourRealEmail@yahoo.com.au]AuthPass=[yourRealYahooPassword]TLS_CA_File=~/cert.pem
  • Создайте файл cert.pem с помощью OpenSSL. Я использовал команду openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 9999 -nodes (более подробная информация на сайте Как создать самозаверяющий сертификат с помощью OpenSSL). Вы можете вставить файл куда угодно, но я просто вставил его в ~/. Куда бы вы его ни положили, убедитесь, что вы направили TLS_CA_File= строку в файле ssmtp.conf в правильное место.

  • Откройте файл /etc/ssmtp/revaliases и добавьте строку:

    [yourPCUsername]:[yourRealEmail@yahoo.com.au]:smtp.mail.yahoo.com:587

    Если вы работаете от имени root, я бы подумал, что вам нужно добавить еще одну строку, заменяющую ваше имя на "root".

  • Вот и все, ты готов идти! Для тестирования самый простой способ (IMO) - создать файл со следующим в нем:

    To: [yourRealEmail@yahoo.com.au]From: "whateverYaWant" <[yourRealEmail@yahoo.com.au]>Subject: Some Notifying EmailMIME-Version: 1.0Content-Type: text/plainBody of your email goes here! Hello world!
  • Сохраните и закройте файл, а затем проверьте, нет ли у вас реального отправить почту установлен, запустите sendmail -V - там должно быть написано "sSMTP".

  • Наконец, беги cat fileWithEmailInIt.txt | sendmail -i -t, затем подождите несколько секунд (10-30) и проверьте свою электронную почту!

Очевидно, заменить [yourRealEmail@yahoo.com.au] с вашим адресом электронной почты (без скобок) и [yourRealYahooPassword] с вашим паролем Yahoo Mail (опять же, без скобок).

Дополнительное примечание 1: Если у вас возникли проблемы с Gmail, попробуйте вариант 1 из этот ответ.
(Благодаря Бен Кризи!)

Дополнительное примечание 2: Если почта отправляется из командной строки, но не через crontab, попробуйте изменить FromLineOverride к NO в /etc/ssmtp/ssmtp.conf. Вы также можете получить более подробное ведение журнала, добавив Debug=YES к ssmtp.conf - дополнительная регистрация идет на /var/log/mail.log.
(Спасибо Якуб Кукул!)

Установите Postfix. Это сложнее, чем большинство других пакетов, но это все равно не сложный.

sudo apt-get install postfix

Выберите "Интернет-сайт", а затем примите все значения по умолчанию. Тогда нам просто нужно прекратить внешние связи, превратив это в "нулевой клиент". Беги: sudoedit /etc/postfix/main.cf и найти inet_interfaces настройка (ближе к концу) и измените ее на loopback-only, вот так:

inet_interfaces = loopback-only

И, наконец, перезапустите Postfix с помощью sudo /etc/init.d/postfix restart (перезагрузка не подойдет).

Теперь у вас есть установка Postfix, которая не будет ретранслировать электронную почту для внешних компьютеров, она будет просто принимать соединения на 127.0.0.1 (и ::1 для IPv6).


Отдельно отметим, что ваши строки cron, вероятно, не работают, потому что вы используете не относительные пути и пути с заменами Bash. sh не понимает ~ и у него может не быть надлежащего PATH набор. Поэтому замените их на (я просто догадываюсь о фактических путях):

1 0 * * *   /home/clonkex/Desktop/toskymesh.sh59 6 * * *  /home/clonkex/Desktop/tooptus.sh0 3 * * *   /usr/bin/snapraid sync

И если ваши скрипты требуют запуска из определенного каталога, убедитесь, что они cd в нужную директорию. Не думайте, что cron будет в нужном месте, поскольку, скорее всего, этого не произойдет.

Мне очень повезло с exim4.

sudo apt-get install alpine exim4 mailutils eximon4 spf-tools-perl swaks

(alpine - это просто почтовый клиент, который мне нравится использовать)

После этого я побежал

sudo dpkg-reconfigure exim4-config

и следовал подсказкам. Эта страница: https://help.ubuntu.com/community/Exim4 это тоже было очень полезно. Мне потребовалось около 10 минут, чтобы запустить его.

Из справочной страницы sSMTP: "Он не выполняет псевдонимирование, которое должно быть выполнено либо в агенте пользователя, либо в mailhub. Также это не делает честь .forwards, которые должны быть сделаны на принимающем хосте. Это особенно не относится к трубопроводам".

Итак, если вы хотите получать все сообщения, отправленные root на ваш дополнительный адрес электронной почты, использовать sSMTP - плохая идея, поскольку он не поддерживает псевдонимы.

Вместо этого вы могли бы использовать postfix. Это все еще очень просто. Вот как использовать его с gmail в качестве smtp для отправки сообщений:

sudo apt-get install postfix mailutils

Общий тип конфигурации почты: Спутниковая система

Системное почтовое имя: Предпочтительное полное имя почтового сервера, например, mail.example.com

Узел ретрансляции SMTP (пусто для none): [smtp.gmail.com ]:587

Добавить в /etc/postfix/main.cf:

smtp_use_tls = yessmtp_sasl_auth_enable = yessmtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwdsmtp_sasl_security_options = noanonymoussmtp_sasl_tls_security_options = noanonymous

Создать /etc/postfix/sasl/sasl_passwd

[smtp.gmail.com]:587 emailtouseforsending@gmail.com:password

Затем:

sudo postmap /etc/postfix/sasl/sasl_passwdsudo chown -R root:postfix /etc/postfix/saslsudo chmod 750 /etc/postfix/saslsudo chmod 640 /etc/postfix/sasl/sasl_passwd*

Отредактируйте /etc/псевдонимы и добавьте:

root: email@example.com

Наконец, запустите:

sudo newaliasessudo systemctl stop postfix.servicesudo systemctl start postfix.service

Теперь вы можете проверить, работает ли перенаправление:

echo "Test to root." | mail -s "Test message to root" root

Надеюсь, это поможет.

В случае, если вы не хотите получать уведомления по электронной почте, но хотите где-то регистрировать выходные данные заданий cron, чтобы иметь возможность проверить их в случае необходимости:

# apt install postfix

Выберите "Только локальный", когда вас попросят указать тип конфигурации почтового сервера.

Чтобы подтвердить, что cron сможете отправлять почту:

# apt install mailutils# echo test body | mail -s 'test subject' root# cat /var/mail/root

В качестве альтернативы добавьте cron работа:

* * * * * date

Подождите, пока он запустится (journalctl -ef или watch date), то cat /var/mail/root.

Я использовал довольно простой метод, чтобы получить cron для отправки электронных писем: Резервное копирование конфигурации Linux, скриптов и документов в Gmail.

Самый простой способ автоматизировать отправку электронной почты

От Отправка оповещений по электронной почте с помощью ssmtp мы находим самый простой способ автоматической отправки электронной почты с терминала или скрипта. Этапы установки просты и понятны:

sudo apt install ssmtpsudo nano /etc/ssmtp/ssmtp.conf# Change "MyEmailAddress" and "MyPassword" to your own.

Есть один не упомянутый шаг; Google отправит вам электронное письмо с подтверждением того, что вы хотите разрешить "менее защищенному" приложению отправлять почту с вашей учетной записью:

gmail turns on less secure apps for email

Существует досада, связанная с получением слишком большого количества почты. Например, каждый раз, когда вы неправильно вводите свой sudo пароль вы получите по электронной почте: Прекратите отправлять мне по электронной почте неудачные попытки ввода пароля sudo