Как изменить поле «От:» для писем из Cron?

34

Я использую удаленный SMTP через nullmailer, и для него требуется установить поле From на определенное имя, но cron установил его как root@my.sweet.server.com.

Как я мог изменить его на что-то вроде me@ya.ru?

Александр Артеменко
источник
Какая реализация cron (и ОС)?
Kimvais
Посмотрите этот вопрос: serverfault.com/questions/438843/… для другого решения.
Робин

Ответы:

13

Я не думаю, что вы можете изменить адрес 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 вообще не используется.

Адрес to должен быть установлен, но вы можете использовать переменную $ MAILTO. Параметр - устанавливает остальные параметры как параметры sendmail, поэтому вы можете использовать параметры -r и -F.

-s это тема

-r является адресом ответа

-F - полное имя отправителя (делает его красивым в почтовых клиентах)

Ричард Холлоуэй
источник
serverfault.com/a/437319/30697, вероятно, должен быть принятым ответом.
lkraav
34

Современные версии 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.

Джон Грин
источник
6
Где "современный" означает что? Это не поддерживается самой последней версией cron в нестабильной Debian (3.0pl1-124) из того, что я вижу в журнале изменений или в документации.
Хлипкий
спасибо, это работало для меня на Archlinux. Существует много разных вкусов cron. ISC Debian выпущен в 2004 году, поэтому расширил определение «современный», но без информации о том, на какой системе он используется - трудно представить эту деталь!
RuiDC
1
К сожалению, cron в Ubuntu (по крайней мере на 14.04 LTS) не упоминается MAILFROMв man 5 crontab.
Арто Бендикен
4
Вы можете установить cronieзаменить cronна Debian / Ubuntu. Та-даа: MAILFROMсуществует:
Андреас Клёкнер
1
cronie не существует в Ubuntu 16.04
alex k
7

/ etc / mailname содержит часть имени домена адреса FROM. Если / etc / mailname содержит «somecompany.com», то для cron, работающего от имени root, будет отправитель root@somecompany.com.

user171601
источник
2
Некоторая информация здесь: wiki.debian.org/EtcMailName - не говорит, использует ли это nullmailer. Я использую sendmail, и это, похоже, не работает для него.
Цитракс
5

Вы можете установить nullmailer по адресу через переменные окружения или командную строку. Аргументы командной строки -fи -Fдля адреса отправителя и для полного имени соответственно.

Обычно вы можете установить переменные окружения в crontab.

NULLMAILER_USER=webmaster
NULLMAILER_HOST=host.example.com
NULLMAILER_NAME="Mr Cron"

5 0 * * * /usr/local/bin/daily.sh
Лахлан Рош
источник
Он спрашивает о ОТ: не ДО:
Кимваис
Хм, это не работает по неизвестной причине.
Александр Артеменко
3

Для меня самый простой способ изменить адрес from в системе - это создать ~/.mailrcфайл с таким содержимым:

set name="My Full Name"
set from="myrealemail@example.com"

Любая из mailкоманд, которые запускаются от моего пользователя, теперь используют эти настройки.

Нильс де Вос
источник
0

Смотрите этот вопрос, если используете exim:

exim: переписать заголовок "From" в конверт "FROM"

Он должен установить адрес «От» для владельца cronjob. Вы можете заменить $header_from:свой собственный адрес, если хотите жестко закодировать его как-нибудь еще.

Владимир Пантелеев
источник
0

Другой простой альтернативой является использование Mutt,

  • создайте .muttrc в домашнем каталоге пользователя, который запускает cron со следующим

    set realname = "Joe User" set from = "user @ host" set use_from = yes

  • Запустите сценарий с командой Mutt или передайте команду cron, из которой Mutt отправляет электронную почту.

Прежде чем Mutt отправит и отправит электронное письмо, он установит заголовок From из файла .muttrc.

Chida
источник
0

Я должен был изменить /etc/mail/sendmail.cfи /etc/mail/sendmail.mc, потому что /etc/mailnameне был использован. Это только изменяет от домена, но не пользователя.

Rudie
источник
0

Вот несколько вещей, которые вы можете использовать для изменения домена отправителя:

Edit this file: /etc/mailname and change to:
    example.org
sudo postconf -e 'myhostname= example.org'
sudo systemctl restart postfix
Тарик
источник
-2

он отправляется по почте из домена user @ - user - это имя пользователя, под которым запускается cron, - поэтому вам нужно создать пользователя «me» - и запустить задание cron от имени этого пользователя.

Затем, чтобы изменить домен, есть разные возможности - может быть, вам нужно изменить запись в файле hosts (или, как на моем компьютере, когда я настраивал это - окно ubuntu) - изменить / etc / mailname - быть доменом, из которого вы хотите, чтобы он пришел.

Кем Мейсон
источник
1
На самом деле это не так - по крайней мере, во многих случаях. В моей системе, например, он отправляется только от пользователя, а не от пользователя @ домена. MTA несет ответственность за добавление локального доменного имени. Это важно в некоторых случаях (например, в моем), когда мой MTA (по причинам, слишком сложным и скучным для описания) не добавляет доменное имя.
Хлипкий