Как я могу сделать crontab электронную почту мной с выводом ее заданий? Я имею MAILTO=redacted@yahoo.com.au
выше заданий, но это не работает.
Я знаю, что должен использовать что-то как Postfix или Sendmail, но ни за что в жизни я не могу узнать, как достигнуть этого. Я искал и искал простое руководство по установке Постфикса, но они являются все безумно сложными и ожидают, что Вы настроите целый сервер, чтобы отправить и получить электронное письмо и знать все условия (как, что такое доменное имя для исходящей почты?).
Все, что я хочу сделать, имеют 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
Я знаю наверняка, что крон работает, но я тестирую почтовую команду с 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
.
Сделайте конфигурацию похожей на (скрыто ) mailhub = smtp.mail.yahoo.com: 587 FromLineOverride = ДА UseSTARTTLS = ДА (скрыто) AuthPass = [вашRealYahooPassword] 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
и добавьте строку :
Если вы работаете как root, я думаю, вам нужно добавить еще одну строку, заменив ваше имя на 'root'.
Вот и все, готово! Самый простой способ (IMO) для проверки - создать файл со следующим содержимым:
Кому: (скрыто)
От: "whatYaWant" (скрыто)
Тема: Уведомление по электронной почте
MIME-версия: 1.0
Контент-Тип: текст / простой
Тело вашего электронного письма отправляется сюда! Привет, мир!
Сохраните и закройте файл, затем, чтобы убедиться, что у вас не установлен настоящий sendmail , запустите sendmail -V
- он должен сказать «sSMTP».
Наконец , запустите cat fileWithEmailInIt.txt | sendmail -i -t
, затем подождите несколько секунд (10-30) и проверьте свою электронную почту!
Очевидно, замените (скрытый) своим адресом электронной почты (без скобок) и [yourRealYahooPassword]
с вашим паролем Yahoo Mail (опять же, без скобок).
Дополнительное примечание 1: Если у вас возникли проблемы с Gmail, попробуйте вариант 1 этого ответа .
(Спасибо Бену Кризи !)
Дополнительное примечание 2: Если почта отправляется из командной строки, но не через crontab, попробуйте изменить FromLineOverride
на НЕТ
в /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
не понимает ~
и может не иметь правильного набора ПУТЬ
. Поэтому замените их на (я просто догадываюсь о реальных путях):
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
(alpine - это просто почтовый клиент, который мне нравится использовать)
После этого я запустил
sudo dpkg-reconfigure exim4-config
и следил за подсказками. Эта страница: https://help.ubuntu.com/community/Exim4 также была очень полезной. На запуск у меня ушло около 10 минут.
Из справочной страницы sSMTP: «Он не использует псевдонимы, которые должны выполняться либо в пользовательском агенте, либо в почтовом хабе. Также не учитываются .forwards, которые должны быть выполнены на принимающем хосте. Он особенно не доставляет в конвейеры. "
Итак, если вы хотите получать все сообщения, отправленные root на вашу внешнюю электронную почту, использовать sSMTP - плохая идея, поскольку он не поддерживает псевдонимы.
Вместо этого вы можете использовать postfix. Все еще очень просто. Вот как использовать его с gmail в качестве smtp для отправки сообщений:
sudo apt-get install postfix mailutils
Общий тип конфигурации почты: Спутниковая система
Системное почтовое имя: предпочтительное полное имя почтового сервера, например, mail.example.com
Узел ретрансляции SMTP (пусто, если нет): [smtp.gmail.com]: 587
Добавить в /etc/postfix/main.cf:[12105estiveCreate / 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
Надеюсь, это поможет.
Я использовал довольно простой метод, чтобы cron
отправлять электронные письма: Резервное копирование конфигурации Linux, скриптов и документов в Gmail .
С Отправлять оповещения по электронной почте с помощью ssmtp мы находим самый простой способ автоматической отправки электронной почты из терминала или сценария. Шаги установки просты:
sudo apt install ssmtp
sudo nano /etc/ssmtp/ssmtp.conf
# Change "MyEmailAddress" and "MyPassword" to your own.
Один шаг не упомянут; Google отправит вам электронное письмо, подтверждающее, что вы хотите разрешить "менее безопасному" приложению отправлять почту с вашей учетной записи:
Получение слишком большого количества почты раздражает. Например, каждый раз, когда вы ошибочно набираете свой пароль sudo
, вы будете получать электронное письмо: Перестаньте присылать мне неверные попытки ввода пароля sudo