Подтвердить что ты не робот

Как установить адрес электронной почты От для mailx?

Я работаю над сценарием KornShell (ksh), работающим на сервере Solaris, который будет отправлять электронное письмо при возникновении условия ошибки. Я отправляю электронное письмо через mailx.

Вопрос: Как установить адрес электронной почты "От" в команде mailx?

Текущий код:

echo ${msg_txt} | mailx -s "Script Failure" ${to_email}

Примечание. Команда работает нормально, однако "От" - это имя пользователя, от имени которого я запускаю сценарий, и я хотел бы для этого перейти на другой адрес электронной почты.

Как бы я это сделал?

4b9b3361

Ответ 1

Вы можете использовать параметр "-r" для установки адреса отправителя:

mailx -r [email protected] -s ...

Ответ 2

Параметр "-r" недействителен в моих системах. Мне пришлось использовать другой синтаксис для поля "От".

-a "From: Foo Bar <[email protected]>"

Ответ 3

Если вы также хотите включить свое реальное имя в поле, вы можете использовать следующий формат

mailx -r "[email protected] (My Name)" -s "My Subject" ...

Если у вас на вашем имени есть символы, отличные от ASCII, например My AEÆoeøaaå (Æ = C3 86, ø = C3 B8, å = C3 A5), вы должны закодировать их следующим образом:

mailx -r "[email protected] (My =?utf-8?Q?AE=C3=86oe=C3=B8aa=C3=A5?=)" -s "My Subject" ...

Надеюсь, это может спасти кого-то час тяжелой работы/исследования!

Ответ 4

В debian, где bsd-mailx установлен по умолчанию, параметр -r не работает. Однако вместо этого вы можете использовать mailx -s subject [email protected] -- -f [email protected]. Согласно man-странице, вы можете указать параметры sendmail после --.

Ответ 5

Просто столкнулся с этой проблемой синтаксиса на компьютере с CentOS 7.

На очень старой машине с Ubuntu, на которой запущен mail, синтаксис хорошо составленной электронной почты:

echo -e "$body" | mail -s "$subject" -a "From: Sender Name <$sender>" "$recipient"

Однако на коробке CentOS 7, поставляемой с установленным mailx, она совершенно другая:

echo -e "$body" | mail -s "$subject" -S "from=Sender Name <$sender>" "$recipient"

Консультация man mail указывает, что -r устарела, и теперь адрес отправителя "От" должен быть установлен непосредственно с помощью -S "variable=value".

В этих и последующих примерах я определяю $sender как "Sender Name <[email protected]>" и $recipients как "[email protected]", как я делаю в своем скрипте bash.

Затем, как и я, вы можете обнаружить, что когда вы пытаетесь сгенерировать содержимое тела письма в своем скрипте в момент отправки письма, вы сталкиваетесь со странным поведением, когда вместо этого тело письма прикрепляется в виде двоичного файла ("ATT00001. bin "," application/octet-stream "или" noname ", в зависимости от клиента).

Это поведение, как Heirloom mailx обрабатывает нераспознанные/управляющие символы при вводе текста. (Подробнее: https://access.redhat.com/solutions/1136493, которая сама ссылается на справочную страницу mailx для решения.)

Чтобы обойти это, я использовал метод, который направляет сгенерированный вывод через tr перед передачей в mail, а также указывает кодировку электронной почты:

echo -e "$body" | tr -d \\r | mail -s "$subject" -S "from=$sender" -S "sendcharsets=utf-8,iso-8859-1" "$recipients"

В моем сценарии я также заранее явно отключаю локаль, поскольку она выполняется как cronjob (а cron не наследует переменные окружения):

LANG="en_GB.UTF8" ; export LANG ;

(здесь обсуждается альтернативный способ установки локалей для cronjobs is discussed here)

Подробнее об этих обходных путях через fooobar.com/questions/954565/... и fooobar.com/questions/318372/....

Ответ 6

Пакет nail предоставляет улучшенный интерфейс mailx. Он включает опцию -r.

В Centos 5 установка пакета mailx дает вам программу под названием mail, которая не поддерживает параметры mailx.

Ответ 7

В macOS Sierra создание ~/.mailrc с настройкой smtp сделало трюк:

set smtp-use-starttls
set smtp=smtp://smtp.gmail.com:587
set smtp-auth=login
set [email protected]
set smtp-auth-password=yourpass

Затем отправить почту из CLI:

echo "your message" | mail -s "your subject" [email protected]

Ответ 8

На Ubuntu Bionic 18.04 это работает как нужно:

$ echo -e "testing email via yourisp.com from command line\n\nsent on: $(date)" | mailx --append='FROM:Foghorn Leghorn <[email protected]>' -s "test cli email $(date)" -- [email protected]