Я использую удаленный SMTP через nullmailer, и для него требуется установить в поле From конкретное имя, но cron установил его как root@my.sweet.server.com.
Как я мог поменять его на что-то вроде me@ya.ru?
Современные версии cron принимают «MAILFROM = ...» в формате crontab. Предлагаю вам попробовать "man 5 crontab". Если в нем упоминается MAILFROM, ваша версия должна его поддерживать. Фраза, которую следует искать, находится ближе к концу абзаца, посвященного MAILTO, и должна быть примерно такой:
If MAILFROM is defined (and non-empty), it will be used as the envelope sender address, otherwise, ''root'' will be used.
Я не думаю, что вы можете изменить адрес FROM (кто-то должен добавить опцию MAILFROM).
Вы можете сделать что-то подобное для достижения аналогичного результата:
* * * * * /path/to/script 2>&1 | mail -s "Output of /path/to/script" toaddress@example.com -- -r "fromaddress@example.com" -F"Full Name of sender"
Весь вывод передается команде mail, поэтому переменная MAILTO вообще не используется.
Необходимо указать адрес, но вы можете использовать переменную $ MAILTO. - устанавливает остальные параметры как параметры sendmail, поэтому вы можете использовать параметры -r и -F.
-s это предмет
-r - это ответный адрес
-F - полное имя отправителя (чтобы оно выглядело хорошо в почтовых клиентах)
/ etc / mailname содержит часть имени домена в адресе FROM. Если / etc / mailname содержит somecompany.com, тогда cron, запущенный для root, будет иметь отправителя как root@somecompany.com
Вы можете установить nullmailer с адреса через переменные среды или командную строку. Аргументы командной строки: -f
и -F
для адреса отправителя и полного имени соответственно.
Обычно вы можете установить переменные среды в crontab.
NULLMAILER_USER=webmaster
NULLMAILER_HOST=host.example.com
NULLMAILER_NAME="Mr Cron"
5 0 * * * /usr/local/bin/daily.sh
Для меня самый простой способ изменить адрес отправителя в системе - это создать ~/.mailrc
файл с таким содержимым:
set name="My Full Name"
set from="myrealemail@example.com"
Любой из mail
команды, которые выполняются от имени моего пользователя, теперь используют эти настройки.
Вот несколько вещей, которые вы можете применить, чтобы изменить свой домен отправителя:
Edit this file: /etc/mailname and change to:
example.org
sudo postconf -e 'myhostname= example.org'
sudo systemctl restart postfix
См. Этот вопрос при использовании Exim:
exim: перепишите заголовок "From" в конверт "FROM"
Он должен установить адрес «От» на адрес владельца cronjob. Вы можете заменить $header_from:
на свой собственный адрес, если вы хотите жестко закодировать его для чего-то другого.
Другой простой вариант - использовать mutt,
создайте .muttrc в домашнем каталоге пользователя, который запускает cron, со следующими
set realname = "Joe User" set from = "user @ host" set use_from = yes
Запустите сценарий с командой mutt или передайте команду cron в команду mutt, чтобы отправить электронное письмо.
Перед отправкой и электронной почтой Mutt установит заголовок From из файла .muttrc.
Мне пришлось изменить /etc/mail/sendmail.cf
и /etc/mail/sendmail.mc
, так как /etc/mailname
не использовался. Однако он изменяет только домен from, а не пользователя.
В моем случае я выполнил следующие шаги, чтобы решить проблему:
установить значение этой переменной:
mydomain = my-domain-name.xxx
раскомментируйте эту строку:
#myorigin = $ myhostname
Это старый вопрос, но он остается актуальным. Для 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. Сценарий также полагается на тот факт, что у меня настроен постфикс для перенаправления root@example.com в мой собственный почтовый ящик. Фактический сценарий:
#!/bin/bash
# MyCronic v1 - cron job report wrapper to send results directly to mail
# Copyright 2020 Martin Brampton. No rights reserved, whatsoever.
# Based on Cronic v3 - cron job report wrapper
# Copyright 2007-2016 Chuck Houpt. No rights reserved, whatsoever.
# 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="
My cronic detected failure or error output for the command:
$@
RESULT CODE: $RESULT
ERROR OUTPUT:
$(< $ERR)
STANDARD OUTPUT:
$(< $OUT)
"
if [ $TRACE != $ERR ]; then
$mailtext="
$mailtext
TRACE-ERROR OUTPUT:
$(< $TRACE)
"
fi
$MAILER -s "My Cronic detected a failure on $FQDN" -aFrom:MyCronic\<$HOSTNAME@$DOMAIN\> $RECIPIENT <<< "$mailtext"
fi
rm -rf "$TMP"
Возможно, вам придется немного адаптировать его для своих целей, но он должен работать в большинстве ситуаций с минимальными изменениями.
он отправляется по почте от user @ domain - пользователь - это имя для входа, под которым работает cron, поэтому вам нужно будет создать пользователя «я» и запустить задание cron от имени этого пользователя.
Затем, чтобы изменить домен, есть разные возможности - возможно, вам нужно изменить запись файла hosts (или, как на моей машине, когда я настраивал это - ящик ubuntu) - измените / etc / mailname - быть доменом, из которого вы хотите, чтобы он исходил.