Я использую удаленный SMTP через nullmailer, и для него требуется установить в поле отправителя «From» определенное имя, но cron установил его как root@my.sweet.server.com.
Как я бы мог поменять его на что-то другое?
Ответ 1
Я не думаю, что вы можете изменить адрес отправителя FROM (кто-то должен добавить опцию MAILFROM).
Но можно сделать что-то вроде этого для достижения аналогичного результата:
* * * * * /path/to/script 2 > &1 | mail -s "Output of /path/to/script" toaddress@example.com -- -r "fromaddress@example.com" -F"Полное имя отправителя"
Весь вывод передается команде mail, поэтому переменная MAILTO вообще не используется.
Так как необходимо указать адрес отправителя, вы можете использовать переменную $MAILTO. которая устанавливает параметры для sendmail. Можно использовать следующие параметры -r и -F.
- -s - субъект
- -r - ответный адрес
- -F - полное имя отправителя (используется, например, в почтовых клиентах)
Ответ 2
Современные версии cron принимают «MAILFROM = ...» в формате crontab. Предлагаю вам попробовать "man 5 crontab". Если в нем упоминается MAILFROM, ваша версия должна его поддерживать, исходя из документации, посвященной MAILTO:
Если MAILFROM определен (и непустой), он будет использоваться в качестве адреса отправителя письма, в противном случае будет использоваться ''root''.
Ответ 3
/etc/mailname содержит часть имени домена в адресе FROM. Если /etc/mailname содержит somecompany.com, тогда cron, запущенный для root, будет иметь такой адрес отправителя
root@somecompany.com
Ответ 4
Вы можете установить nullmailer с адреса через переменные среды или командную строку. Аргументы командной строки: -f и –F для адреса отправителя и полного имени соответственно.
Можно установить переменные среды в crontab.
NULLMAILER_USER=webmaster
NULLMAILER_HOST=host.example.com
NULLMAILER_NAME="Mr.Cron"
5 0 * * * /usr/local/bin/daily.sh
Ответ 5
Для меня самый простой способ изменить адрес отправителя в системе - это создать ~/.mailrc файл с таким содержимым:
set name="Полное имя"
set from="myrealemail@example.com"
Все mail команды, которые выполняются от имени моего пользователя, теперь используют эти настройки.
Ответ 6
Еще один простой вариант - использовать mutt,
создайте .muttrc в домашнем каталоге пользователя, который запускает cron, со следующими настройками:
set realname = "Вася" set from = "user@host" set use_from = yes
Запустите скрипт с командой mutt или передайте в cron команду mutt, чтобы отправить электронное письмо.
Перед отправкой электронной почты Mutt устанавливает заголовок From из файла .muttrc.
Ответ 7
Этот вопрос до сих пор остается актуальным. Для Debian (и, возможно, других) нет простого решения, потому что MAILFROM остается неподдерживаемым. Это беспокоило меня в течение некоторого времени, так как я получаю почту, сгенерированную cron, с нескольких разных серверов. Но большинство из них находятся на поддоменах того же домена, и большинство из них не поддерживают почту. Следовательно, я вынужден настроить postfix для использования домена в качестве источника, и вся почта, возможно, будет приходить из одного и того же места.
Я наконец добрался до решения, адаптировав cronic для создания mycronic. Это почти то же самое, что и cronic, за исключением того, что он отправляет свой вывод прямо на почту и подавляет весь вывод в cron. Предполагается, что сервер настроен так, чтобы давать правильные ответы на различные запросы к имени хоста. Например:
hostname -f => webserver.example.com
hostname -d => example.com
hostname => webserver
Это достигается за счет наличия только веб-сервера в /etc/hostname и наличия строки в /etc/hosts:
127.0.0.1 webserver.example.com webserver
Postfix настроен так, чтобы myorigin был установлен на mydomain. Сценарий также полагается на тот факт, что у меня есть postfix, настроенный для перенаправления root@example.com на мой собственный почтовый ящик. Фактический сценарий:
#!/bin/bash
# MyCronic v1 - обертка отчета задания cron для отправки результатов непосредственно на почту
# Public Domain CC0: http://creativecommons.org/publicdomain/zero/1.0/
set -eu
DOMAIN=`hostname -d`
FQDN=`hostname -f`
RECIPIENT="root@$DOMAIN"
MAILER=`which mail`
TMP=$(mktemp -d)
OUT=$TMP/cronic.out
ERR=$TMP/cronic.err
TRACE=$TMP/cronic.trace
set +e
"$@" >$OUT 2>$TRACE
RESULT=$?
set -e
PATTERN="^${PS4:0:1}\\+${PS4:1}"
if grep -aq "$PATTERN" $TRACE; then
! grep -av "$PATTERN" $TRACE > $ERR
else
ERR=$TRACE
fi
if [ $RESULT -ne 0 -o -s "$ERR" ]; then
mailtext="
$@
RESULT CODE: $RESULT
ERROR OUTPUT:
$(< $ERR)
STANDARD OUTPUT:
$(< $OUT)
"
if [ $TRACE != $ERR ]; then
$mailtext="
$mailtext
TRACE-ERROR OUTPUT:
$(< $TRACE)
"
fi
$MAILER -s "Мой Cronic обнаружил сбой в $FQDN" -aFrom:MyCronic\<$HOSTNAME@$DOMAIN\> $RECIPIENT <<< "$mailtext"
fi
rm -rf "$TMP"
Возможно, вам придется немного адаптировать его для своих целей, но он должен работать в большинстве ситуаций с минимальными изменениями.
Linux