Как сделать так, чтобы crontab писал мне по электронной почте с выводом

45

Как я могу сделать так, чтобы 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'

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

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

Clonkex
источник
@shellter забыл пометить вас.
Clonkex
Очень хорошее тестирование! Вы должны включить эту информацию в свой оригинальный вопрос. На данный момент я уже не могу помочь. Вы на правильном пути, но "Почему это так сложно" .... Извините ... это может быть связано с тем, что Linux / Unix является системой с высокой степенью конфигурации. У каждого есть свой особый случай, для которого необходимо изменить конфигурацию.
Оболочка
Получил ваш ответ, но я бы потратил на это часы (наверное). Снова, ищите здесь sendmail setup. Удачи!
Оболочка
@shellter Я только что понял, что есть журналы для mail. В одном из них говорится: Diagnostic-Code: SMTP; 553 5.7.1 [BL21] Connections will not be accepted from [MyIPRedacted], because the ip is in Spamhaus's list; see http://postmaster.yahoo.com/550-bl23.htmlэто означает, что команда работает, а Yahoo блокирует почту?
Clonkex
за мою зарплату, но это довольно явное сообщение, так что, похоже, так. Как вы, вероятно, знаете, попробуйте отправить с другого IP-адреса и посмотреть, идет ли он через ИЛИ, если сообщение об ошибке изменяется. Вы знаете о http://webmasters.stackexchange.com? Возможно, они могут помочь вам лучше или лучше, но chat.stackexchange.com/rooms/524/webmastersтам, где, казалось бы, приветствуются все вопросы (хм ... вам может понадобиться больше представителей, чтобы войти, вы находитесь на других сайтах стек-обмена?) Удачи.
Оболочка

Ответы:

33

В конце концов я использовал 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=указали строку в 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- он должен сказать «sSTP».
  • Наконец, запустите cat fileWithEmailInIt.txt | sendmail -i -t, затем подождите несколько секунд (10-30) и проверьте свою электронную почту!

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

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

Clonkex
источник
Там. Это придется сделать. Я потратил слишком много времени на возня с глупым форматированием.
Clonkex
Какой смысл в .pem файле? Я вижу, что этот учебник не включает в себя: havetheknowhow.com/Configure-the-server/Install-ssmtp.html
Ричард
1
Что касается Gmail, я столкнулся с serverfault.com/questions/635139/… и мне пришлось включить доступ для менее безопасных приложений
Бен Криси
2
Спасибо за предложение sSMTP. В Ubuntu Wiki есть полезное руководство (но не используйте адрес электронной почты, hostnameкак показано в данный момент). Этот ответ предполагает, что вы можете использовать сертификаты сервера по умолчанию, но я обнаружил, что мне не нужна TLS_CA_File=строка для отправки через GMail.
Марк Берри
2
@MattM. Не рекомендуется, просто не поддерживается. Должно быть прекрасно использовать sSMTP в непроизводственной среде :)
Clonkex
15

Установите 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это будет в правильном месте, поскольку это вероятно не будет.

Оли
источник
Спасибо, но Postfix будет сложно, если только потому , что , кажется , нет простых руководств вообще. В любом случае, у меня все отлично работает с sSMTP, который делает именно то, что мне нужно, и действительно прост (хотя для того, чтобы он действительно заработал, потребовалось немало путаницы и случайных предположений). Я хотел опубликовать ответ, но забыл - мне действительно удалось уничтожить установку моей ОС, поэтому, как только она снова будет полностью
восстановлена,
И фактически мои рабочие места cron работали очень хорошо ~/Desktop/.
Clonkex
2
Я нуждался inet_interfaces = localhost. только postfix: fatal: config variable inet_interfaces: host not found: loopback-only
петля
3

Мне очень повезло с 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 минут, чтобы запустить его.

О, Ар
источник
1

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

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

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

sudo apt-get install postfix mailutils

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

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

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

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

smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous

Создайте / etc / postfix / sasl / sasl_passwd

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

Затем:

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

Отредактируйте / etc / aliases и добавьте:

root: email@example.com

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

sudo newaliases
sudo systemctl stop postfix.service
sudo systemctl start postfix.service

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

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

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

Дули
источник