Linux

Правильная настройка отправки почты через Cron

Я использую удаленный 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

Как запускать приложения с графическим интерфейсом в контейнере Linux Docker

Linux

Как сделать так, чтобы дочерний процесс завершался после завершения родительского

Linux

Как настроить разрешения linux для папки WWW

Linux

Существующие решения, позволяющие использовать контроль версий для файлов конфигурации сервера