Как задать адрес электронной почты From для команды mailx?

StackOverflow https://stackoverflow.com/questions/1296979

Вопрос

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

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

Текущий Код:

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

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

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

Это было полезно?

Решение

Вы можете использовать опцию «-r», чтобы установить адрес отправителя:

mailx -r me@example.com -s ...

Другие советы

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

-a "From: Foo Bar <foo.bar@someplace.com>"

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

mailx -r "me@example.com (My Name)" -s "My Subject" ...

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

mailx -r "me@example.com (My =?utf-8?Q?AE=C3=86oe=C3=B8aa=C3=A5?=)" -s "My Subject" ...

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

В Дебиане где bsd-mailx устанавливается по умолчанию, -r вариант не работает.Однако вы можете использовать mailx -s subject recipient@abc.com -- -f sender@abc.com вместо.Согласно справочной странице, вы можете указать параметры sendmail после --.

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

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

Только что столкнулся с этой синтаксической проблемой на машине 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 <sender.address@domain.tld>" и $recipients как "recipient.name@domain.tld" как я делаю в своем 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"

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

LANG="en_GB.UTF8" ; export LANG ;

(Альтернативный метод установки локалей для cronjobs. обсуждается здесь)

Дополнительную информацию об этих обходных путях можно найти на странице https://stackoverflow.com/a/29826988/253139 и https://stackoverflow.com/a/3120227/253139.

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

set smtp-use-starttls
set smtp=smtp://smtp.gmail.com:587
set smtp-auth=login
set smtp-auth-user=youremail@gmail.com
set smtp-auth-password=yourpass

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

echo "your message" | mail -s "your subject" to_email@gmail.com

В Ubuntu Bionic 18.04 это работает по желанию:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top