เปลี่ยนที่อยู่“ จาก:” ใน Unix“ mail”


90

ส่งข้อความจากบรรทัดคำสั่ง 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: mail (GNU Mailutils 1.1)
รหัสข้อความ: <E1KdTJj-00025z-RK @ localhost>
จาก: <chris @ localhost>
วันที่: พุธที่ 10 กันยายน 2551 เวลา 13:17:23 น. -0400

จาก: foo@bar.org

การทดสอบ

บรรทัด "From: foo@bar.org" เป็นส่วนหนึ่งของเนื้อหาข้อความไม่ใช่ส่วนหนึ่งของส่วนหัว


1
รสชาติของ Unix คืออะไร? และเมลรุ่นใด เพียงเพื่อให้ทราบว่าไม่ได้ผล
Vinko Vrsalovic

อืมเกือบทั้งหมด ใครก็ตามที่ใช้ mailx หรือ Berkeley mail จะเห็นแบบนั้น หากคุณต้องการให้มีผลกับส่วนหัวให้เขียนส่วนหัวทั้งหมดแล้วส่งด้วย rmail หรือ sendmail โดยตรง
Thomas Kammeyer

โอ้ แต่ขอโทษฉันเรียกใช้ GenToo
Thomas Kammeyer

สำหรับบันทึกฉันใช้ mailx และตัวอย่างที่ Chris ให้ผลงาน หรือนั่นคือสิ่งที่คุณหมายถึง?
Vinko Vrsalovic

Vinko คุณใช้ UN * X เวอร์ชันใดอยู่ คุณหมายถึง "ผลงาน" ที่คุณได้รับผลลัพธ์ของเขาหรือคุณได้รับพฤติกรรมที่ต้องการซึ่งจะตอบสนองความต้องการของเขา? ขึ้นอยู่กับระดับหนึ่งว่าการส่งข้อความทำงานอย่างไรบนแพลตฟอร์มของคุณและลูกค้าจะเพิ่มบรรทัดว่างหรือไม่ก่อน
Thomas Kammeyer

คำตอบ:


110

ในเมลเวอร์ชันของฉัน (Debian linux 4.0) ตัวเลือกต่อไปนี้ใช้สำหรับควบคุมที่อยู่ต้นทาง / ตอบกลับ

  • -aสวิทช์สำหรับส่วนหัวเพิ่มเติมเพื่อนำไปใช้จัดหาจาก: หัวในบรรทัดคำสั่งที่จะถูกผนวกเข้ากับส่วนหัวอีเมลขาออก
  • $ replytoตัวแปรสภาพแวดล้อมระบุตอบกลับ: ส่วนหัว

ดังนั้นลำดับต่อไปนี้

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

NB (2):ผู้ใช้ CentOS แสดงความคิดเห็นจำนวนมากได้เสริมว่าคุณจำเป็นต้องใช้-rไม่ได้-a

หมายเหตุ (3):คำตอบนี้มีอายุอย่างน้อย 10 ปี (1) โปรดจำไว้ว่าเมื่อคุณเข้ามาจาก Google


ฉันเพิ่งทดสอบอีกครั้งที่นี่เพื่อให้แน่ใจและใช้ได้ดีสำหรับฉัน ไม่ใช่ทุกโปรแกรมรับส่งเมลที่ทำงานได้ดีกับการตอบกลับ แต่ตอนนี้ฉันคิดว่านั่นเป็นปัญหาที่แก้ไขได้แล้ว ตัวแปร REPLYTO env ถูกกล่าวถึงใน man page, จดหมายอื่น ๆ ของ UNIX ให้เกียรติมัน, emacs ฯลฯ แต่ฉันเดาว่าคุณมีวิธีแก้ไข
ซม.

ฉันไม่คิดว่าเป็นโปรแกรมรับส่งเมล ... ฉันไม่เห็นส่วนหัวตอบกลับในข้อความดิบ แต่ใช่ - เพียงพอแล้ว
Chris Conway

1
ไม่มันไม่ได้ แต่: "คู่มือ GNU mailutils ฉบับสมบูรณ์ไม่สามารถใช้ได้ในระบบ Debian เนื่องจากเหตุผลด้านลิขสิทธิ์" - ตอบกลับ: ... ได้ผล
Chris Conway

ฉันยังไม่เห็นการกล่าวถึง REPLYTO ที่gnu.org/software/mailutils/manual/mailutils.html
Chris Conway

4
ใน CentOS mail -aตัวเลือกหมายถึง "attachemnet" ฉันจำเป็นต้องใช้-rlikemail -r from@whatever.com
equivalent8

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

คำสั่ง 'mail' ของ GNU mailutils ไม่อนุญาตให้คุณทำสิ่งนี้ (อย่างน้อยที่สุด) แต่ถ้าคุณติดตั้ง "มรดกตกทอด -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 / alternate / mail
$ ls -l / etc / ทางเลือก / mail
lrwxrwxrwx 1 รูท 23 2010-12-23 08:33 / etc / ทางเลือก / mail -> / usr / bin / มรดกตกทอด-mailx

5
อาจเป็นประโยชน์เมื่อทราบว่าmailคำสั่งGNU mailutils ที่ติดตั้งไว้ล่วงหน้าบน Ubuntu 14.04 LTS รองรับ-rตัวเลือกดังนั้นคุณจึงสามารถตั้งค่าที่อยู่ผู้ส่งได้อย่างง่ายดาย
gerlos

ฉันได้ทดสอบกับ Debian 9.11 แล้วและตัวเลือกนี้ก็ใช้งานได้เช่นกัน
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

ข้างต้นเป็นวิธีแก้ปัญหาของฉัน .... สามารถเพิ่มส่วนหัวพิเศษใด ๆ ได้หลังจากจากและก่อนตอบกลับไปที่ ... เพียงตรวจสอบให้แน่ใจว่าคุณรู้ไวยากรณ์ส่วนหัวของคุณก่อนที่จะเพิ่ม .... สิ่งนี้ใช้ได้ดีกับฉัน


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ไม่ได้ผล แต่การส่ง-tไปยัง sendmail นั้นใช้งานได้และ "ง่าย"


4

นี่คือตัวเลือกบางส่วน:

  • หากคุณมี Privelige เพียงพอให้กำหนดค่า sendmail เพื่อทำการเขียนซ้ำด้วยตาราง generics

  • เขียนส่วนหัวทั้งหมดด้วยตัวคุณเอง (หรือส่งถึงตัวคุณเองบันทึกข้อความทั้งหมดพร้อมส่วนหัวทั้งหมดและแก้ไขใหม่และส่งด้วย rmail จากบรรทัดคำสั่ง

  • ส่งโดยตรงด้วย sendmail ใช้แฟล็กบรรทัดคำสั่ง "-f" และอย่าใส่บรรทัด "From:" ในข้อความของคุณ

สิ่งเหล่านี้ไม่ได้เหมือนกันทั้งหมด แต่ฉันจะปล่อยให้คุณดูต่อไป

ในอุปกรณ์พกพาของฉันฉันได้ตรวจสอบสิทธิ์ sendmail ในฐานะไคลเอนต์ไปยังเซิร์ฟเวอร์อีเมลขาออกและฉันใช้ generics เพื่อทำให้เมลที่ส่งกลับมาที่บัญชีอื่น มันใช้งานได้เหมือนมีเสน่ห์ ฉันรวบรวมอีเมลขาเข้าด้วย 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

ฉันไม่รู้ว่ามันเหมือนกันกับ OS อื่นหรือเปล่า แต่ใน 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 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 ของคุณ
Anthon

3

ใน Debian 7 ฉันยังไม่สามารถตั้งค่าที่อยู่ผู้ส่งได้อย่างถูกต้องโดยใช้คำตอบจากคำถามนี้ (มักจะเป็นชื่อโฮสต์ของเซิร์ฟเวอร์) แต่แก้ไขด้วยวิธีนี้

ติดตั้งมรดกตกทอด-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 ทางเลือกและฉันก็งง
Stephane


1

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

-S ช่วยให้คุณระบุตัวเลือกสตริงจำนวนมากโดยวิธีที่ง่ายที่สุดในการแก้ไขส่วนหัวและอื่น ๆ




0

ใน CentOS 5.5 วิธีที่ง่ายที่สุดที่ฉันพบในการตั้งค่าเริ่มต้นจากโดเมนคือการแก้ไขไฟล์โฮสต์ หากไฟล์โฮสต์ของคุณมีที่อยู่ WAN / สาธารณะของคุณเพียงแค่แก้ไขชื่อโฮสต์แรกที่ระบุไว้ ตัวอย่างเช่นไฟล์โฮสต์ของคุณอาจมีลักษณะดังนี้:

...
11.22.33.44 localhost เริ่มต้นโดเมนwhat-else.com
...

หากต้องการส่งจาก what-else.com เพียงแค่แก้ไขเพื่อให้ what-else.com อยู่ในรายการก่อนเช่น:

...
11.22.33.44 whatever-else.com localhost เริ่มต้นโดเมน
...

ฉันไม่สามารถพูดแทน distro อื่น ๆ ได้ (หรือแม้แต่รุ่นของ 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 มันมีตัวเลือกมากมาย ด้วยการโง่คุณทำสิ่งนี้:

export EMAIL=myfrom@example.com
export REPLYTO=myreplyto@example.com
mutt -s Testing chris@example.org
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.