ฉันจะส่งอีเมลผ่านคำสั่ง UNIX mailx ได้อย่างไร


คำตอบ:


109

ตัวอย่าง

$ echo "something" | mailx -s "subject" recipient@somewhere.com

เพื่อส่งไฟล์แนบ

$ uuencode file file | mailx -s "subject" recipient@somewhere.com

และส่งไฟล์แนบและเขียนเนื้อหาข้อความ

$ (echo "something\n" ; uuencode file file) | mailx -s "subject" recipient@somewhere.com

4
ฉันลองแล้ว แต่มันไม่มีการตอบสนองใด ๆ ไม่ว่าจะเป็นการแจ้งข้อผิดพลาดบางอย่างหรือส่งอีเมลไปที่ myname@gmail.com จำเป็นต้องมีการกำหนดค่าเซิร์ฟเวอร์หรือไม่?
user269484

2
ไม่จำเป็นต้องกำหนดค่าใด ๆ ตรวจสอบการเชื่อมต่ออินเทอร์เน็ตของคุณ ฉันมีการเชื่อมต่อโดยตรงกับอินเทอร์เน็ตผ่านสายเคเบิลฉันไม่ได้ใช้พร็อกซีหรืออะไรเลยดังนั้นมันจึงทำงานเคียงข้างฉัน
ghostdog74

2
คุณควรตรวจสอบข้อความแสดงข้อผิดพลาดในกล่องจดหมายของคุณด้วย คือรันmail.
hafichuk

2
อย่างไรก็ตามโปรดทราบว่านั่นuuencodeเป็นเทคโนโลยีดั้งเดิมจากยุคพันปีที่ผ่านมาซึ่งไม่ได้สร้างสิ่งที่เราหมายถึงในปัจจุบันโดย "ไฟล์แนบ" โดยทั่วไปจะวางชิ้นส่วนของความสับสนที่เครื่องอ่านได้ในตอนท้ายของข้อความ ในวันนี้และยุคนี้คุณจะได้รับบริการที่ดีขึ้นจากจดหมายที่รับรู้ MIME อย่างเหมาะสม น่าเสียดายที่ไม่มีการmailxแทนที่ที่รองรับในระดับสากลด้วยคุณสมบัติ MIME แต่ถ้าคุณมีmuttนั่นอาจเป็นหนทางที่มีการต่อต้านน้อยที่สุด
tripleee

5
@ user269484 Gmail ไม่ยอมรับอีเมลจากที่อยู่ IP ที่ไม่ได้รับอนุญาต อ่านsupport.google.com/mail/answer/10336

34

อยู่นี่ไง :

echo "Body" | mailx -r "FROM_EMAIL" -s "SUBJECT" "To_EMAIL"

ปล. เนื้อหาและหัวเรื่องควรอยู่ในเครื่องหมายคำพูดคู่ ลบคำพูดออกจากFROM_EMAILและTo_EMAILในขณะที่แทนที่ที่อยู่อีเมล


1
บน Mac คุณจะได้รับข้อผิดพลาดจากคำสั่ง mailx หากคุณใช้ -r mailx: ตัวเลือกที่ผิดกฎหมาย - r การใช้งาน: mailx [-EiInv] [-s subject] [-c cc-addr] [-b bcc-addr] [ -F] to-addr ... mailx [-EHiInNv] [-F] -f [ชื่อ] mailx [-EHiInNv] [-F] [-u ผู้ใช้] mailx -e [-f ชื่อ] mailx -H
jcpennypincher

คุณสามารถทำได้ -S from=a@b.com
Kalpesh Soni

6
mailx -s "subjec_of_mail" abc@domail.com < file_name

ผ่านmailxยูทิลิตี้เราสามารถส่งไฟล์จากไปunix mail serverในโค้ดด้านบนเราจะเห็นพารามิเตอร์แรกคือพารามิเตอร์-s "subject of mail" ที่สองคือmail IDและพารามิเตอร์สุดท้ายคือชื่อไฟล์ที่เราต้องการแนบ


1
สิ่งนี้ไม่ได้แนบไฟล์ทำให้เนื้อหาของไฟล์อยู่ในเนื้อความ
Guus

5
mail [-s subject] [-c ccaddress] [-b bccaddress] toaddress

-c และ -b เป็นทางเลือก

-s: ระบุหัวเรื่องหากหัวเรื่องมีช่องว่างให้ใช้เครื่องหมายคำพูด

-c: ส่งสำเนาคาร์บอนไปยังรายชื่อผู้ใช้โดยคั่นด้วยลูกน้ำ

-b: ส่งสำเนาตาบอดไปยังรายชื่อผู้ใช้โดยคั่นด้วยลูกน้ำ

หวังว่าคำตอบของฉันจะชี้แจงข้อสงสัยของคุณ


5

เร็วขึ้นด้วยคำสั่ง MUTT

echo "Body Of the Email"  | mutt -a "File_Attachment.csv" -s "Daily Report for $(date)"  -c cc_mail@g.com to_mail@g.com -y
  1. -c รายการอีเมล cc
  2. - รายการเรื่อง
  3. - ส่งจดหมาย

ฉันต้องแยกไฟล์แนบกับ "-" เพื่อให้มันใช้งานได้ดังนี้echo "" | mutt -s "test" -a ./file -- name@mail.com -y
subtleseeker

4

จากหน้าคน:

การส่งอีเมล

ในการส่งข้อความถึงบุคคลตั้งแต่หนึ่งคนขึ้นไปสามารถเรียกใช้ mailx โดยมีอาร์กิวเมนต์ซึ่งเป็นชื่อของบุคคลที่จะส่งอีเมลถึง จากนั้นผู้ใช้จะต้องพิมพ์ข้อความตามด้วย 'control-D' ที่จุดเริ่มต้นของบรรทัด

กล่าวอีกนัยหนึ่ง mailx อ่านเนื้อหาที่จะส่งจากอินพุตมาตรฐานและสามารถเปลี่ยนเส้นทางเป็นเหมือนปกติได้ เช่น:

ls -l $HOME | mailx -s "The content of my home directory" someone@email.adr


1

การปรับแต่งจากที่อยู่

MESSAGE="SOME MESSAGE"
SUBJECT="SOME SUBJECT"
TOADDR="u@u.com"
FROM="DONOTREPLY"

echo $MESSAGE | mail  -s "$SUBJECT" $TOADDR  -- -f $FROM

ยกเว้นจาก man mail: -f [file] อ่านในเนื้อหาของ mbox ของผู้ใช้ (หรือไฟล์ที่ระบุ) สำหรับการประมวลผล เมื่อ mailx เลิกใช้งานจะเขียนข้อความที่ไม่ได้ลบกลับไปที่ไฟล์นี้ ไฟล์สตริงได้รับการจัดการตามที่อธิบายไว้สำหรับคำสั่งโฟลเดอร์ด้านล่าง
ZJ Lyu

ขึ้นอยู่กับเวอร์ชันที่คุณใช้ มีหลายคำสั่งที่แข่งขันกันไม่ได้mailและmailxมีตัวเลือกที่แตกต่าง
tripleee

1

นี่คือฟังก์ชั่นมัลติฟังก์ชั่นเพื่อจัดการกับการส่งเมลที่มีไฟล์แนบหลายไฟล์:

enviaremail() {
values=$(echo "$@" | tr -d '\n')
listargs=()
listargs+=($values)
heirloom-mailx $( attachment=""
for (( a = 5; a < ${#listargs[@]}; a++ )); do
attachment=$(echo "-a ${listargs[a]} ")
echo "${attachment}"
done) -v -s "${titulo}" \
-S smtp-use-starttls \
-S ssl-verify=ignore \
-S smtp-auth=login \
-S smtp=smtp://$1 \
-S from="${2}" \
-S smtp-auth-user=$3 \
-S smtp-auth-password=$4 \
-S ssl-verify=ignore \
$5 < ${cuerpo}
}

ฟังก์ชั่นเรียก: enviaremail "smtp.mailserver: port" "from_address" "authuser" "'pass'" "destination" "รายการไฟล์แนบคั่นด้วยช่องว่าง"

หมายเหตุ: ลบเครื่องหมายคำพูดคู่ในการโทร

นอกจากนี้โปรดอย่าลืมกำหนด $ titulo (หัวเรื่อง) และ $ cuerpo (เนื้อหา) ภายนอกของอีเมลก่อนใช้ฟังก์ชัน


0

หากคุณต้องการส่งมากกว่าสองคนหรือ DL:

echo "Message Body" | mailx -s "Message Title" -r sender@someone.com receiver1@someone.com,receiver_dl@.com

ที่นี่:

  • -s = หัวเรื่องหรือหัวเรื่องอีเมล
  • -r = ผู้ส่งเมลหรือ DL

คุณช่วยอธิบายได้ไหมว่าทำไมจึงใช้เสียงสะท้อนเพื่อส่งผ่านเนื้อหาข้อความ หากฉันข้ามสิ่งนี้และดำเนินการจาก MailX เคอร์เซอร์จะกะพริบราวกับว่ากำลังรอการป้อนข้อมูล
LonelyRogue
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.