Як змусити crontab надіслати електронною поштою мені вихід?


45

Як я можу змусити crontab надіслати мені електронну пошту із виведенням своїх завдань? У мене MAILTO=redacted@yahoo.com.auвище робочих місць, але це не працює.

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

Все, що я хочу зробити, - це надіслати мені електронну пошту. Чому це так складно ??

Додаткова інформація:

Мій файл 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одно тестую поштову команду .


@shellter забув вас позначити тегом.
Клонкекс

Дуже добре тестування! Ви повинні включити цю інформацію в своє початкове запитання. На даний момент мені вже вдається допомогти. Ви на правильному шляху, але "Чому це так складно" .... Вибачте ... це було б те, що 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 блокує пошту?
Клонкекс

за межею моєї зарплати, але це досить явне повідомлення, тому, здавалося б, так. Як ви, напевно, знаєте, спробуйте надіслати інший IP-адресу і подивіться, чи проходить це АБО чи зміниться повідомлення про помилку. Ви знаєте про це http://webmasters.stackexchange.com? Вони, ймовірно, можуть допомогти вам краще чи краще, але chat.stackexchange.com/rooms/524/webmastersтам, де, здавалося б, всі питання вітаються (гм .. вам може знадобитися більше представників, щоб увійти, ви на будь-яких інших сайтах stackexchange?) Удачі.
обстріл

Відповіді:


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

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

Додаткова примітка. Якщо у вас проблеми з Gmail, спробуйте варіант 1 цієї відповіді (дякую Бен Крізі за цю інформацію).


Там. Це доведеться робити. Я витратив занадто багато часу, обмінюючись дурним форматуванням, як це є.
Клонкекс

У чому сенс файлу .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, який робить саме те, що мені потрібно, і справді простий (хоча, як і раніше, потрібно багато хитрощів і випадкових здогадів, щоб він фактично працював). Я мав намір опублікувати відповідь, але забув - мені фактично вдалося зруйнувати інсталяцію ОС, так що, як тільки я все це повторюсь, я повністю
розміщу

І насправді мої роботи з крон працювали чудово ~/Desktop/.
Клонкекс

2
Мені потрібно було inet_interfaces = localhost. loopback-тільки дав меніpostfix: fatal: config variable inet_interfaces: host not found: loopback-only
craq

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: "Це не робить псевдоніму, що має бути зроблено ні в агенті користувача, ні на поштовому концентраторі. Також не шанується. Наперед, що потрібно зробити на приймаючому хості. Це особливо не доставляє на трубопроводи. "

Отже, якщо ви хочете отримувати всі повідомлення, що надсилаються до root, на розширений електронний лист, погана ідея використовувати sSMTP, оскільки він не підтримує псевдоніми.

Натомість ви можете користуватися postfix. Це все ще дуже просто. Ось як використовувати його з 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 / псевдоніми та додати:

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

Сподіваюся, це допомагає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.