Измените адрес «От:» в «почте» Unix.

89

Отправка сообщения из командной строки Unix с использованием mail TO_ADDRрезультатов в электронном письме от $USER@$HOSTNAME. Есть ли способ изменить адрес "От:", вставленный пользователем mail?

Для записи, я использую GNU Mailutils 1.1 / 1.2 в Ubuntu (но я видел такое же поведение с Fedora и RHEL).

[РЕДАКТИРОВАТЬ]

$ mail -s Тестирование chris@example.org                                                                  
Копия: 
От: foo@bar.org

Тестирование
.

дает

Тема: Тестирование
Кому: <chris@example.org>
X-Mailer: почта (GNU Mailutils 1.1)
Идентификатор сообщения: <E1KdTJj-00025z-RK @ localhost>
От: <chris @ localhost>
Дата: среда, 10 сентября 2008 г. 13:17:23 -0400

От: foo@bar.org

Тестирование

Строка «From: foo@bar.org» является частью тела сообщения, а не заголовком.

Крис Конвей
источник
1
Что это за разновидность Unix? а какая версия почты? Просто чтобы знать, где это не работает.
Винко Врсалович
Гм, почти все. Любой, кто пользуется mailx или berkeley mail, увидит это таким. Если вы хотите изменить заголовок, напишите весь заголовок и отправьте напрямую с помощью rmail или sendmail.
Томас Каммейер,
О, но, извините, я использую GenToo.
Томас Каммейер,
Для записи я использую mailx, и приведенный Крисом пример работает. Или ты это имел в виду?
Винко Врсалович
Винко, а какая у тебя версия UN * X? Вы имеете в виду под словом «работает», что вы получаете его результаты или желаемое поведение, которое отвечало бы его потребностям? Это зависит в некоторой степени от того, как представление сообщений работает на вашей платформе , и добавляет ли клиент пустую строку перед
Томас Kammeyer

Ответы:

109

В моей версии почты (Debian linux 4.0) для управления адресами источника / ответа работают следующие параметры.

  • -a переключатель, для дополнительных заголовков применять, снабжающий From: заголовок в командной строке , которая будет приложенном к заголовку исходящей почты
  • $ REPLYTO переменная среды определяет Reply-To: заголовок

так что следующая последовательность

export REPLYTO=cms-replies@example.com
mail -aFrom:cms-sends@example.com -s 'Testing'

В результате в моих почтовых клиентах получается письмо с адреса cms-sends@example.com, и все ответы на него по умолчанию будут на cms-replies@example.com.

NB: Пользователи Mac OS: у вас нет -a, но есть $ REPLYTO

NB (2): пользователи CentOS, многие комментаторы добавили, что вам нужно -rне использовать-a

NB (3). Этому ответу не менее десяти лет (1), имейте это в виду, когда будете приходить из Google.

cms
источник
Я просто проверил его снова здесь, чтобы убедиться, и он отлично работает для меня. Не все почтовые клиенты хорошо работают с Reply-To, но я думал, что к настоящему времени это решенная проблема. Переменная REPLYTO env упоминается на странице руководства, другие почтовые программы UNIX уважают ее, emacs и т. Д. Тем не менее, я думаю, у вас есть исправление.
cms
Я не думаю, что это почтовый клиент ... Я не вижу заголовок Reply-To в необработанном тексте сообщения. Но да, -a достаточно.
Крис Конвей,
1
Нет, это не так. Но: «Полное руководство GNU mailutils недоступно в системах Debian по причинам лицензирования». -aReply-To: ... работает.
Крис Конвей,
Я также не вижу никакого упоминания о REPLYTO в gnu.org/software/mailutils/manual/mailutils.html
Chris Conway
4
в CentOS mail -aопция означает «аттачемнет». Мне нужно было использовать -rподобноеmail -r from@whatever.com
эквивалент8
42

На Centos 5.3 я могу:

mail -s "Subject" user@address.com -- -f from@address.com < body

Двойное тире останавливает анализ почты с аргументом -f и передает его самой sendmail.

Beau
источник
3
не работает. Теперь к адресу добавлено 3 адреса. to address, f-адрес и localdomain
шориф2000 09
2
Можете ли вы помочь, раньше это работало, но после недавнего обновления оно больше не работает, оно просто пытается дополнительно отправить электронное письмо на -f @ hostname
Вил
1
Не работает на CentOS 6.3. Попробуйте ответить @ ubuntu-fanboy ниже, используя флаг -r.
Skytaker
26

Команда GNU mailutils 'mail' не позволяет вам этого делать (по крайней мере, легко). Но если вы устанавливаете 'heirloom-mailx', его почтовая команда (mailx) имеет параметр '-r', чтобы переопределить значение по умолчанию '$ USER @ $ HOSTNAME' из поля.

echo "Hello there" | mail -s "testing" -r sender@company.com recipient@company.com

Работает для mailx, но не для mail.

$ ls -l / usr / bin / mail
lrwxrwxrwx 1 root root 22 23 декабря 2010 г. 08:33 / usr / bin / mail -> / etc / alternatives / mail
$ ls -l / и т. д. / альтернативы / почта
lrwxrwxrwx 1 root root 23 23 декабря 2010 08:33 / etc / alternatives / mail -> / usr / bin / heirloom-mailx
убунту-фанат
источник
5
Возможно, было бы полезно узнать, что mailкоманда GNU mailutils, предустановленная в Ubuntu 14.04 LTS, поддерживает -rопцию, поэтому вы можете легко установить адрес отправителя.
gerlos 04
Я тестировал Debian 9.11, и этот вариант тоже работает.
Федор РЫХТИК,
14
mail -s "$(echo -e "This is the subject\nFrom: Paula <johny@paula.com>\n
Reply-to: 1232564@yourserver.com\nContent-Type: text/html\n")" 
milas.josh@gmail.com < htmlFileMessage.txt

Вышеупомянутое - мое решение .... любые дополнительные заголовки могут быть добавлены сразу после от и до ответа на ... просто убедитесь, что вы знаете синтаксис заголовков, прежде чем добавлять их .... это отлично сработало для меня.

Мох
источник
1
Это работает для меня с вашим примером ... Когда я меняю тему адреса электронной почты и т. Д., Отображаются все заголовки?
bsmoo
7

Плюс хорошо использовать -F optionдля указания имени отправителя.

Что-то вроде этого:

mail -s "$SUBJECT" $MAILTO -- -F $MAILFROM -f ${MAILFROM}@somedomain.com

Или просто посмотрите доступные варианты: http://www.courier-mta.org/sendmail.html

Artickl
источник
5

Также можно установить как имя От, так и адрес отправителя, используя что-то вроде:

 echo test | mail -s "test" example@example.com -- -F'Some Name<example2@example.com>' -t

По какой-то причине передача так -F'Some Name'и -fexample2@example.comне работает, но передача в -tsendmail работает и «легко».

Альканзар
источник
4

Вот несколько вариантов:

  • Если у вас достаточно привилегий, настройте sendmail для перезаписи с таблицей generics.

  • Напишите весь заголовок самостоятельно (или отправьте его себе по почте, сохраните все сообщение со всеми заголовками, отредактируйте заново и отправьте его с помощью rmail из командной строки.

  • Отправляйте напрямую с помощью sendmail, используйте флаг командной строки «-f» и не включайте строку «От:» в свое сообщение.

Это не совсем одно и то же, но я оставлю это на ваше усмотрение.

На моем портативном компьютере у меня есть sendmail, который аутентифицируется как клиент на сервере исходящей почты, и я использую универсальные методы, чтобы вернуть почту на другую учетную запись. Работает как часы. Я собираю входящую почту с помощью fetchmail.

Томас Каммейер
источник
4

Я получил это из всех приведенных выше ответов. Когда я пробовал каждый из них, у меня ничего не получалось. Я сделал много следов и ошибок, объединив все приведенные выше ответы и пришел к этому. Я не уверен, работает ли это для вас, но у меня это сработало на Ununtu 12.04 и RHEL 5.4.

echo "This is the body of the mail" | mail -s 'This is the subject' '<receiver-id1@email.com>,<receiver-id2@email.com>' -- -F '<SenderName>' -f '<from-id@email.com>'

Можно отправить письмо любому количеству людей, добавив любое количество идентификаторов получателя, и письмо будет отправлено SenderName с from-id@email.com

Надеюсь это поможет.

deepak.prathapani
источник
это не работает в / usr / bin / mail, возможно, ваша команда предназначена для sendmail.
basZero
3

Я не знаю, так ли это с другими ОС, но в OpenBSD команда mail имеет такой синтаксис:

mail to-addr ... -sendmail-options ...

В sendmail есть опция -f, где вы указываете адрес электронной почты для поля FROM :. У меня работает следующая команда.

mail recepient@example.com -f from@example.com
Райан Баронг
источник
Работает для меня! (Также openBSD - Macbook pro.)
Aeonaut
1
Обновление - получатель электронной почты по-прежнему видит имя моей локальной учетной записи раньше from@example.com- например, «Aeonaut from@example.com». Есть идеи, как это изменить?
Aeonaut
3
У меня не работает. (os x mountain lion) "mail: нельзя давать -f и кому послать."
Джонни
3

Спасибо BEAU

mail -s "Subject" user@address.com -- -f from@address.com

Я только что нашел это, и у меня это работает. На страницах руководства для почты 8.1 на CentOS 5 об этом не упоминается. Для -fварианта на странице руководства говорится:

-f Читать сообщения из файла, названного файловым операндом, а не из системного почтового ящика. (См. Также папку.) Если файловый операнд не указан, читать сообщения из mbox, а не из системного почтового ящика.

Так или иначе, это здорово, спасибо.

гбла
источник
1
-fконечно, не вариант для mailвашего примера, так как ему предшествует --. Этот вариант передан вашему MTA
Антон
3

В Debian 7 я все еще не мог правильно установить адрес отправителя, используя ответы на этот вопрос (всегда будет имя хоста сервера), но решил это таким образом.

Установить heirloom-mailx

apt-get install heirloom-mailx

убедитесь, что это значение по умолчанию.

update-alternatives --config mailx

Напишите сообщение.

mail -s "Testing from & replyto" -r "sender <sender@example.com>" -S replyto="sender@example.com" recipient@example.net < <(echo "Test message")
желе
источник
Что update-alternativesделает эта команда? Это дает мне 3 варианта, и я озадачен.
Стефан
1

В CentOS это сработало для меня:

echo "email body" | mail -s "Subject here" -r from_email_address email_address_to
Селин Ауссур
источник
1

echo "body" | mail -S from=address@foo.com "Hello"

-S позволяет вам указать множество строковых параметров, что является самым простым способом изменения заголовков и т. Д.

Эндрю Бэкеби
источник
1

эхо "тест" | mailx -r fake@example.com -s 'test' email@example.com

Работает в OpenBSD.

Дж. Серон
источник
0

это сработало для меня

echo "hi root"|mail -rsawrub@testingdomain.org -s'testinggg' root
axel22
источник
0

В CentOS 5.5 самый простой способ установить значение по умолчанию из домена - это изменить файл hosts. Если ваш файл hosts содержит ваш WAN / общедоступный IP-адрес, просто измените первое имя хоста, указанное для него. Например, ваш файл hosts может выглядеть так:

...
11.22.33.44 локальных по умолчанию домен whatever-else.com
...

Чтобы он отправлялся с сайта any-else.com, просто измените его так, чтобы вначале был указан something-else.com, например:

...
11.22.33.44 whatever-else.com локальный по умолчанию домена
...

Я не могу говорить о каком-либо другом дистрибутиве (или даже о версии CentOS), но в моем конкретном случае вышеуказанное работает отлично.

papsy
источник
0

Что позволило мне иметь собственный адрес для ответа на Ubuntu 16.04с UTF-8кодированием и прикрепленного файла:

Установите почтовый клиент:

sudo apt-get install heirloom-mailx

Отредактируйте конфигурацию SMTP:

sudo vim /etc/ssmtp/ssmtp.conf
mailhub=smtp.gmail.com:587
FromLineOverride=YES
AuthUser=???@gmail.com
AuthPass=???
UseSTARTTLS=YES

Отправьте письмо:

sender='send@domain.com'
recipient='recipient@domain.com'
zipfile="results/file.zip"
today=`date +\%d-\%m-\%Y`
mailSubject='My subject on the '$today
read -r -d '' mailBody << EOM
Find attached the zip file.

Regards,
EOM
mail -s "$mailSubject" -r "Name <$sender>" -S replyto="$sender" -a $zipfile $recipient < <(echo $mailBody)
Стефан
источник
0

Ни одно из вышеперечисленных решений не работает для меня ...

#!/bin/bash

# Message
echo "My message" > message.txt

# Mail
subject="Test"
mail_header="From: John Smith <john.smith@example.com>"
recipients="recipient@example.com"

#######################################################################
cat message.txt | mail -s "$subject" -a "$mail_header" -t "$recipients"
JazzCat
источник
-1

Предоставленные ранее ответы не помогли мне в CentOS5. Я установил mutt. Вариантов много. С mutt вы делаете это следующим образом:

export EMAIL=myfrom@example.com
export REPLYTO=myreplyto@example.com
mutt -s Testing chris@example.org
нажатие клавиши
источник