Как заставить crontab отправлять мне сообщения по электронной почте?

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

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

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

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

Мой файл crontab выглядит так:

 MAILTO=redacted@yahoo.com.au 1 0 * * * ~/Desktop/toskymesh.sh 59 6 * * * ~/Desktop/tooptus.sh 0 3 * * * snapraid sync 

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

Вывод ps -ef | grep '[s]endmail' ps -ef | grep '[s]endmail'

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

Я точно знаю, что cron работает, но я тестирую почтовую команду с помощью echo Test | mail -s Test redacted@yahoo.com.au 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:587 FromLineOverride=YES UseSTARTTLS=YES AuthUser=[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 (подробнее здесь ). Вы можете вставить файл в любом месте, но я просто выбросил его в ~ /. Куда бы вы его не поместили, убедитесь, что вы TLS_CA_File= строку 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 Email MIME-Version: 1.0 Content-Type: text/plain Body of your email goes here! Hello world! 
  • Сохраните и закройте файл, затем убедитесь, что у вас нет подлинного sendmail , запустите sendmail -V – он должен сказать «sSMTP».
  • Наконец, запустите cat fileWithEmailInIt.txt | sendmail -i -t cat fileWithEmailInIt.txt | sendmail -i -t , затем подождите несколько секунд (10-30) и проверьте свою электронную почту!

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

Примечание. Если у вас возникли проблемы с Gmail, попробуйте вариант 1 этого ответа (спасибо Ben Creasy за эту информацию).

Установите 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.sh 59 6 * * * /home/clonkex/Desktop/tooptus.sh 0 3 * * * /usr/bin/snapraid sync 

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

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

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

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

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

 sudo dpkg-reconfigure exim4-config 

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