Змініть адресу “Від:” у “поштовій скриньці” 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

Тестування

Рядок "Від: foo@bar.org" є частиною тіла повідомлення, а не частиною заголовка.


1
Що це за смак Unix? а яка поштова версія? Просто щоб знати, де це не працює.
Вінко Врсалович

Гм, майже всі. Той, хто використовує пошту mailx або berkeley, буде бачити це саме так. Якщо ви хочете вплинути на заголовок, напишіть весь заголовок і надішліть безпосередньо за допомогою rmail або sendmail.
Thomas Kammeyer,

О, але, вибачте, я керую GenToo.
Томас Каммаєр,

Для запису я використовую mailx, і приклад, який Кріс дає, працює. Або це ви мали на увазі?
Вінко Врсалович

Вінко, яку версію UN * X ти використовуєш? Ви маєте на увазі під "роботами", що ви отримуєте його результати або що ви отримуєте бажану поведінку, яка відповідала б його потребі? Це певною мірою залежить від того, як працює надсилання повідомлень на вашій платформі, і чи додає клієнт порожній рядок до
Thomas 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

Примітка: Користувачі Mac OS: у вас немає -a, але у вас є $ REPLYTO

Примітка (2): Користувачі CentOS, багато коментаторів додали, що вам потрібно використовувати -rне-a

Примітка (3): цій відповіді принаймні десять років (1), майте це на увазі, коли ви надходите з Google.


Я просто перевірив його ще раз тут, щоб переконатися, і він у мене чудово працює. Не всі поштові клієнти добре працюють з функцією Reply-To, але я міг подумати, що проблему вже вирішено. Змінна REPLYTO env згадується на сторінці довідки, інші поштові скриньки UNIX вшановують її, emacs тощо. Однак, я думаю, у вас є виправлення.
cms

Я не думаю, що це поштовий клієнт ... Я не бачу заголовка Відповісти до тексту в необробленому тексті повідомлення. Але, так, -a цілком достатньо.
Кріс Конвей

1
Ні, це не так. Але: "Повне керівництво по GNU mailutils недоступне в системах Debian через причини ліцензування." -aReply-To: ... працює.
Кріс Конвей

Я також не бачу жодної згадки про REPLYTO на gnu.org/software/mailutils/manual/mailutils.html
Кріс Конвей

4
у CentOS mail -aопція означає "Attachemnet". Мені потрібно було використовувати -rlikemail -r from@whatever.com
equivalent 8

42

На Centos 5.3 я можу робити:

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

Подвійний тире зупиняє розбір пошти аргументу -f і передає його самому sendmail.


3
не працює. 3 адреси додаються до адреси зараз. адреса, адреса f та локальний домен
shorif2000

2
Чи можете ви допомогти, це раніше працювало - але, оскільки нещодавнє оновлення, воно більше не працює, воно просто намагається додатково надіслати електронне повідомлення на адресу -f @ hostname
Wil,

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 кореневий корінь 22 2010-12-23 08:33 / usr / bin / mail -> / etc / alternatives / mail
$ ls -l / etc / alternative / mail
lrwxrwxrwx 1 кореневий корінь 23 2010-12-23 08:33 / etc / alternatives / mail -> / usr / bin / heirloom-mailx

5
Можливо, може бути корисно дізнатись, що mailкоманда GNU mailutils, попередньо встановлена ​​на Ubuntu 14.04 LTS, підтримує -rопцію, тому ви можете легко встановити адресу відправника.
gerlos

Я тестував на 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


5

Також можна встановити як від імені, так і від адреси, використовуючи щось на зразок:

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

Чомусь проходить -F'Some Name' і -fexample2@example.comне працює, але передача в -tsendmail працює і є "простою".


4

Ось кілька варіантів:

  • Якщо у вас достатньо privelige, налаштуйте sendmail для перезаписів із загальною таблицею

  • Напишіть весь заголовок самостійно (або надішліть його собі, збережіть все повідомлення з усіма заголовками та повторно відредагуйте та надішліть його за допомогою 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

Сподіваюся, це допомагає.


це не працює vor / usr / bin / mail, можливо, ваша команда для sendmail.
basZero

3

Я не знаю, чи так само з іншими ОС, але в OpenBSD поштова команда має такий синтаксис:

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 гірський лев) "пошта: Неможливо дати -f та людей, яким слід надіслати."
Джонні,

3

Дякую BEAU

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

Я щойно знайшов це, і це працює для мене. Сторінки для електронної пошти 8.1 на CentOS 5 про це не згадують. Як -fваріант, на сторінці сторінки написано:

-f Читання повідомлень із файлу, названого операндом файлу, замість системної поштової скриньки. (Див. Також папку.) Якщо не вказано операнд файлу, читайте повідомлення з mbox замість системної поштової скриньки.

Тож у будь-якому випадку це чудово знайти, дякую.


1
-fзвичайно не є варіантом mailу вашому прикладі, оскільки йому передує --. Цей варіант передається вашому MTA
Anthon

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

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

-S дозволяє вказати безліч варіантів рядків, на сьогоднішній день найпростіший спосіб змінити заголовки тощо.



0

це спрацювало для мене

echo "hi root"|mail -rsawrub@testingdomain.org -s'testinggg' root

0

У CentOS 5.5 найпростіший спосіб встановити за замовчуванням з домену - це змінити файл hosts. Якщо файл хостів містить вашу WAN / загальнодоступну IP-адресу, просто змініть перше ім'я хосту, вказане для нього. Наприклад, файл хостів може виглядати так:

...
11.22.33.44 домен за замовчуванням localhost whatever-else.com
...

Щоб змусити його надсилати з what-else.com, просто модифікуйте його так, щоб first-else.com був у списку першим, наприклад:

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

Я не можу говорити за будь-який інший дистрибутив (або навіть версію CentOS), але в моєму конкретному випадку вищесказане працює чудово.


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"

-1

Надані раніше відповіді не працювали для мене на CentOS5. Я встановив mutt. Тут є багато варіантів. За допомогою mutt ви робите це таким чином:

export EMAIL=myfrom@example.com
export REPLYTO=myreplyto@example.com
mutt -s Testing chris@example.org
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.