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 для папки WWW

Linux

Как часто следует перезагружать серверы Linux?

Linux

Можно ли отключить доступ к интерактивной оболочке при туннелировании веб-трафика через SSH

Linux

Linux API для отображения запущенных процессов

×