Ubah alamat "Dari:" di Unix "mail"


89

Mengirim pesan dari baris perintah Unix menggunakan mail TO_ADDRhasil di email dari $USER@$HOSTNAME. Apakah ada cara untuk mengubah alamat "Dari:" yang disisipkan mail?

Sebagai catatan, saya menggunakan GNU Mailutils 1.1 / 1.2 di Ubuntu (tetapi saya telah melihat perilaku yang sama dengan Fedora dan RHEL).

[EDIT]

$ mail -s Pengujian chris@example.org                                                                  
Cc: 
Dari: foo@bar.org

Menguji
.

hasil

Subjek: Pengujian
Kepada: <chris@example.org>
X-Mailer: mail (GNU Mailutils 1.1)
ID-Pesan: <E1KdTJj-00025z-RK @ localhost>
Dari: <chris @ localhost>
Tanggal: Rabu, 10 Sep 2008 13:17:23 -0400

Dari: foo@bar.org

Menguji

Baris "From: foo@bar.org" adalah bagian dari badan pesan, bukan bagian dari header.


1
Rasa Unix apa ini? dan versi email yang mana? Hanya untuk mengetahui di mana itu tidak berhasil.
Vinko Vrsalovic

Um, hampir semuanya. Siapapun yang menggunakan mailx atau berkeley mail akan melihatnya seperti itu. Jika Anda ingin mempengaruhi header, tulis seluruh header dan kirim dengan rmail atau sendmail secara langsung.
Thomas Kammeyer

Oh, tapi, maaf, saya menjalankan GenToo.
Thomas Kammeyer

Sebagai catatan, saya menggunakan mailx dan contoh karya Chris. Atau itu yang kamu maksud?
Vinko Vrsalovic

Vinko, UN * X versi berapa yang kamu jalankan? Apakah yang Anda maksud dengan "pekerjaan" adalah Anda mendapatkan hasil atau bahwa Anda mendapatkan perilaku yang diinginkan yang akan memenuhi kebutuhannya? Itu tergantung pada tingkat tertentu pada bagaimana pengiriman pesan bekerja pada platform Anda dan apakah klien menambahkan baris kosong sebelum
Thomas Kammeyer

Jawaban:


109

Di versi email saya (Debian linux 4.0), opsi berikut berfungsi untuk mengontrol alamat sumber / balasan

  • yang -a switch, untuk header tambahan untuk menerapkan, memasok Dari: header pada baris perintah yang akan ditambahkan ke header surat keluar
  • yang $ replyto variabel lingkungan menentukan Balasan-To: header

jadi berikut urutannya

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

Hasilnya, di klien email saya, adalah email dari cms-sends@example.com, yang setiap balasannya akan menjadi default ke cms-replies@example.com

NB: Pengguna Mac OS: Anda tidak memiliki -a, tetapi Anda memiliki $ REPLYTO

NB (2): CentOS pengguna, banyak komentator telah menambahkan bahwa Anda perlu menggunakan -rtidak-a

NB (3): Jawaban ini setidaknya berumur sepuluh tahun (1), harap diingat saat Anda masuk dari Google.


Saya baru saja mengujinya lagi di sini untuk memastikan, dan berfungsi dengan baik untuk saya. Tidak semua klien email bekerja dengan baik dengan Reply-To, tetapi saya pikir itu adalah masalah yang sudah terselesaikan sekarang. Variabel REPLYTO env disebutkan di halaman manual, mailer UNIX lain menghormati itu, emacs dll. Namun, saya rasa Anda sudah memperbaikinya.
cms

Menurut saya ini bukan klien email ... Saya tidak melihat header Balas-Ke di teks pesan mentah. Tapi, ya, -a sudah cukup.
Chris Conway

1
Tidak, tidak. Tetapi: "Panduan lengkap mailutils GNU tidak tersedia di sistem Debian karena alasan lisensi." -aReply-To: ... bekerja.
Chris Conway

Saya juga tidak melihat REPLYTO disebutkan di gnu.org/software/mailutils/manual/mailutils.html
Chris Conway

4
di CentOS mail -apilihannya berarti "attachemnet". Saya perlu menggunakan -rlikemail -r from@whatever.com
equivalent8

42

Di Centos 5.3 saya dapat melakukan:

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

Tanda hubung ganda menghentikan mail dari mengurai argumen -f dan meneruskannya ke sendmail itu sendiri.


3
tidak bekerja. 3 alamat ditambahkan ke alamat sekarang. alamat ke, alamat f dan
domain lokal

2
Bisakah Anda membantu, ini dulu berfungsi - tetapi, karena pembaruan terkini, ini tidak lagi berfungsi, ia hanya mencoba mengirim email tambahan ke -f @ hostname
Wil

1
Tidak berfungsi pada CentOS 6.3. Coba jawaban @ ubuntu-fanboy di bawah ini menggunakan -r flag.
skytaker

26

Perintah 'mail' GNU mailutils tidak memungkinkan Anda melakukan ini (setidaknya dengan mudah). Tetapi Jika Anda menginstal 'heirloom-mailx', perintah emailnya (mailx) memiliki opsi '-r' untuk menimpa bidang default '$ USER @ $ HOSTNAME' dari.

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

Berfungsi untuk 'mailx' tapi bukan 'mail'.

$ ls -l / usr / bin / mail
lrwxrwxrwx 1 root root 22 2010-12-23 08:33 / usr / bin / mail -> / etc / alternate / mail
$ ls -l / etc / alternate / mail
lrwxrwxrwx 1 root root 23 2010-12-23 08:33 / etc / alternate / mail -> / usr / bin / heirloom-mailx

5
Mungkin berguna untuk mengetahui bahwa mailperintah mailutils GNU yang telah diinstal sebelumnya pada -ropsi mendukung Ubuntu 14.04 LTS , sehingga Anda dapat dengan mudah mengatur alamat pengirim.
gerlos

Saya telah menguji Debian 9.11, dan opsinya juga berfungsi.
Fedir RYKHTIK

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

di atas adalah solusi saya .... header tambahan apa pun dapat ditambahkan tepat setelah dari dan sebelum membalas ke ... pastikan Anda mengetahui sintaks header sebelum menambahkannya .... ini bekerja dengan sempurna untuk saya.


1
Ini bekerja untuk saya dengan contoh Anda ... Ketika saya mengubah subjek alamat email, dll., Semua header akan dihapus?
bsmoo


5

Anda juga dapat menyetel nama Dari dan dari alamat menggunakan sesuatu seperti:

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

Untuk beberapa alasan meneruskan -F'Some Name'dan -fexample2@example.comtidak berhasil, tapi meneruskan -tke sendmail bekerja dan "mudah".


4

Berikut beberapa opsinya:

  • Jika Anda cukup privelige, konfigurasikan sendmail untuk melakukan rewrites dengan tabel generics

  • Tulis sendiri seluruh header (atau kirimkan ke email Anda sendiri, simpan seluruh pesan dengan semua header, dan edit ulang, dan kirimkan dengan rmail dari baris perintah

  • Kirim langsung dengan sendmail, gunakan tanda baris perintah "-f" dan jangan sertakan baris "Dari:" di pesan Anda

Ini tidak semuanya persis sama, tetapi saya akan menyerahkannya kepada Anda untuk memeriksanya lebih lanjut.

Di portabel saya, saya telah mengautentikasi sendmail sebagai klien ke server surat keluar dan saya menggunakan obat generik untuk membuat surat balasan masuk ke akun lain. Ini bekerja seperti pesona. Saya menggabungkan email masuk dengan fetchmail.


4

Saya mendapatkan ini dari semua jawaban di atas. Tidak ada yang berhasil bagi saya ketika saya mencoba semuanya. Saya melakukan banyak jejak dan kesalahan dengan menggabungkan semua jawaban di atas dan menyimpulkan ini. Saya tidak yakin apakah ini berhasil untuk Anda tetapi berhasil untuk saya di Ununtu 12.04 dan 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>'

Seseorang dapat mengirim email ke sejumlah orang dengan menambahkan sejumlah id penerima dan email dikirim oleh SenderName dari from-id@email.com

Semoga ini membantu.


ini tidak berfungsi vor / usr / bin / mail, mungkin perintah Anda untuk sendmail.
basZero

3

Saya tidak tahu apakah itu sama dengan OS lain, tetapi di OpenBSD, perintah mail memiliki sintaks ini:

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

sendmail memiliki opsi -f di mana Anda menunjukkan alamat email untuk bidang FROM :. Perintah berikut berfungsi untuk saya.

mail recepient@example.com -f from@example.com

Bekerja untuk saya! (Juga openBSD - Macbook pro.)
Aeonaut

1
Perbarui - penerima email masih melihat nama akun lokal saya sebelumnya from@example.com- misalnya, "Aeonaut from@example.com". Ada ide bagaimana mengubah ini?
Aeonaut

3
Tidak bekerja untuk saya. (os x mountain lion) "mail: Tidak bisa memberi -f dan orang untuk dikirim."
Jonny

3

Terima kasih BEAU

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

Saya baru saja menemukan ini dan berhasil untuk saya. Halaman manual untuk mail 8.1 di CentOS 5 tidak menyebutkan ini. Untuk -fopsi, halaman manual mengatakan:

-f Membaca pesan dari file yang dinamai oleh operan file alih-alih kotak surat sistem. (Lihat juga folder.) Jika tidak ada operand file yang ditentukan, baca pesan dari mbox alih-alih kotak surat sistem.

Jadi bagaimanapun ini bagus untuk ditemukan, terima kasih.


1
-ftentu saja bukan merupakan pilihan maildalam contoh Anda, seperti yang didahului oleh --. Opsi itu diserahkan ke MTA Anda
Anthon

3

Di Debian 7 saya masih tidak dapat mengatur alamat pengirim dengan benar menggunakan jawaban dari pertanyaan ini, (akan selalu menjadi nama host server) tetapi menyelesaikannya dengan cara ini.

Pasang heirloom-mailx

apt-get install heirloom-mailx

pastikan itu default.

update-alternatives --config mailx

Tulis pesan.

mail -s "Testing from & replyto" -r "sender <sender@example.com>" -S replyto="sender@example.com" recipient@example.net < <(echo "Test message")

Apa yang update-alternativesdilakukan perintah ini ? Ini memberi saya 3 pilihan dan saya bingung.
Stephane

1

Di CentOS, ini berfungsi untuk saya:

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 memungkinkan Anda menentukan banyak opsi string, sejauh ini merupakan cara termudah untuk memodifikasi header dan semacamnya.


1

echo "test" | mailx -r fake@example.com -s 'test' email@example.com

Ia bekerja di OpenBSD.


0

ini berhasil untuk saya

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

0

Di CentOS 5.5, cara termudah yang saya temukan untuk mengatur default dari domain adalah dengan memodifikasi file host. Jika file host Anda berisi alamat WAN / IP publik Anda, cukup ubah nama host pertama yang terdaftar untuknya. Misalnya, file host Anda mungkin terlihat seperti:

...
11.22.33.44 localhost domain-default apa pun-else.com
...

Untuk membuatnya mengirim dari apa pun-else.com, cukup modifikasi sehingga apa pun-else.com terdaftar terlebih dahulu, misalnya:

...
11.22.33.44 whatever-else.com localhost default-domain
...

Saya tidak dapat berbicara untuk distro lain (atau bahkan versi CentOS) tetapi dalam kasus khusus saya, di atas berfungsi dengan sempurna.


0

Apa yang memungkinkan saya memiliki alamat balas-ke khusus Ubuntu 16.04dengan UTF-8encoding dan lampiran file:

Instal klien email:

sudo apt-get install heirloom-mailx

Edit konfigurasi SMTP:

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

Kirim surat:

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

Tidak ada solusi di atas yang berhasil untuk saya ...

#!/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

Jawaban yang diberikan sebelumnya tidak berfungsi untuk saya di CentOS5. Saya menginstal mutt. Ini memiliki banyak pilihan. Dengan mutt Anda melakukan ini dengan cara ini:

export EMAIL=myfrom@example.com
export REPLYTO=myreplyto@example.com
mutt -s Testing chris@example.org
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.