Я пытаюсь изменить отправителя и тему писем, отправленных cronjobs. Для отправки писем я установил пакет mailutils в Ubuntu 14.04.
Вот как я отправляю письмо из cronjob:
0 3 * * * /root/bin/backup.sh 2>&1 | mail -s "Slave1 Backup" -a "From:Slave1<slave3@example.com>" cronjob@example.com
Источник: Как изменить поле «От:» для писем из Cron?
Однако это отправляет мне пустое электронное письмо. Сценарий резервного копирования запущен, потому что я вижу, что все файлы обновлены, однако электронное письмо не содержит текста.
Если я изменю его обратно на это, электронные письма будут содержать весь вывод сценария резервного копирования, как я хочу:
MAILTO: cronjob@example.com
0 3 * * * /root/bin/backup.sh
Что мне нужно изменить, чтобы mailutils отправлял вывод задания cron?
Добавить -E
аргумент к mail
команда, что означает «не отправлять сообщения, если тело пусто».
Поэтому измените строку crontab на:
0 3 * * * /root/bin/backup.sh 2>&1 | mail -E -s "Slave1 Backup" -a "From:Slave1<slave3@example.com>" cronjob@example.com
В моей системе (Arch Linux) -a
параметр, похоже, не меняет From:
адрес. Возможно, вместо этого нужно изменить строку crontab на это:
0 3 * * * /root/bin/backup.sh 2>&1 | mail -E -s "Slave1 Backup" -Sfrom='Slave1 <slave3@example.com>' cronjob@example.com
РЕДАКТИРОВАТЬ: Собственно, мой mail
исполняемый файл исходит из гвоздь пакет. В -E
аргумент не поддерживается GNU mailutils, поэтому мое решение не работает.
Ты можешь использовать семейная реликвия вместо GNU Mailutils. Установите heirloom-mailx
package и измените строку crontab на:
0 3 * * * /root/bin/backup.sh 2>&1 | heirloom-mailx -E -s "Slave1 Backup" -Sfrom='Slave1 <slave3@example.com>' cronjob@example.com
Похоже, это была больше проблема с моим почтовым клиентом, чем с самим cronjob. Я заметил, что Thunderbird правильно отображает текст электронного письма в уведомлении о предварительном просмотре, которое появляется, когда вы получаете электронное письмо с открытым Thunderbird.
Однако при нажатии на электронное письмо внутри самого Thunderbird оно было пустым и не содержало текста. Поэтому я подумал, что это может быть связано с пустым содержимым HTML. Я мог бы исправить это, изменив параметр заголовков в mailutils на
-a "Content-type: text/html;From:Slave3<slave3@spiele-palast.de>"
Cronjob выглядит нормально, я просто изменил место одного параметра в почтовой утилите, и он начинает отправлять электронную почту с выводом скрипта.
0 3 * * * /root/bin/backup.sh 2>&1 | mail -s "Slave1 Backup" cronjob@example.com -a "From:Slave1<slave3@example.com>"