จะส่งอีเมล์จาก Terminal ได้อย่างไร?


169

ฉันรู้ว่ามีวิธีการส่งอีเมลจากเทอร์มินัลใน Linux / MacOS แต่ฉันไม่สามารถหาเอกสารที่เหมาะสมเกี่ยวกับวิธีการทำเช่นนั้นได้

โดยทั่วไปฉันต้องการมันสำหรับสคริปต์ทุบตีของฉันที่แจ้งฉันทุกครั้งที่มีการเปลี่ยนแปลงในไฟล์


3
ควรสังเกตว่าที่นี่มีโฮสต์และ ISP บางราย "ปิด" ความสามารถในการส่งอีเมล ฉันคิดว่ามันเป็นความพยายามที่จะหยุดคนส่งสแปมและฟิชชิ่งผ่านพวกเขา
จิมเจฟฟรีส์

@JimJeffries อันไหน? ฉันใช้เว็บเซิร์ฟเวอร์ Amazon EC2
ckjbgames

คำตอบ:


125

ไปที่ Terminal และพิมพ์man mailเพื่อขอความช่วยเหลือ

คุณจะต้องตั้งค่าSMTP:

http://hints.macworld.com/article.php?story=20081217161612647

ดูสิ่งนี้ด้วย:

http://www.mactricksandtips.com/2008/09/send-mail-over-your-network.html

เช่น:

mail -s "hello" "example@example.com" <<EOF
hello
world
EOF

การดำเนินการนี้จะส่งอีเมลไปexample@example.comยังหัวข้อhelloและข้อความ

สวัสดี

โลก


ฉันเพิ่งลองและมันก็ได้ผลสำหรับฉัน แต่ฉันมีคำถามสองข้อจากความอยากรู้ของฉัน 1 << หมายถึงอะไรออนไลน์ฉันได้เห็นตัวอย่างด้วย '<' หรือ '<< 'ใช้ทำอะไร? และทำไมคุณถึงให้ End Of File ที่นั่นและตอนท้ายของข้อความ?
Deep

เครื่องหมาย "<< EOF" และ "EOF" ทำเครื่องหมาย "here-document" ข้อความระหว่าง EOF สองตัวนั้นถือว่าเป็นสตริงที่ยกมาหลายบรรทัด อธิบายไว้ใน 'man bash'
Joe Inwap

134
echo "this is the body" | mail -s "this is the subject" "to@address"

20
หมายเหตุวิธีแก้ปัญหาทั้งหมดนี้จะถือว่าคุณมี MTA ที่ติดตั้งภายในเครื่อง
Miquel

11
@Miquel จุดดี ใน Ubuntu sudo apt-get install mailutilsคุณจะได้รับสิ่งที่จำเป็นต้องผ่าน
earldouglas

3
@James มันใช้งานไม่ได้กับ MAC ของฉัน (((คุณช่วยฉันได้ไหม)
ใหม่

1
การสอนทีละขั้นตอน: rianjs.net/2013/08/…
DušanMaďar

แปลก. สิ่งนี้ทำให้ฉันได้รับข้อความ "SyntaxError: ไวยากรณ์ที่ไม่ถูกต้อง" แม้ว่าการเปลี่ยนแปลงเดียวที่ฉันทำคือการเปลี่ยนที่อยู่
Jewenile

41

หากคุณต้องการเพียงแค่หัวเรื่อง (เช่นเดียวกับในข้อความแจ้งเตือน) ให้ทำดังนี้

mailx -s "This is all she wrote" < /dev/null "myself@myaddress"

mailutilsคุณอาจจะต้องติดตั้ง สามารถติดตั้งผ่านผู้จัดการแพคเกจ (เช่นapt install mailutils)
Jeevan Takhar

31

อาจเป็นวิธีที่ง่ายที่สุดในการใช้งานcurlนี้ไม่จำเป็นต้องติดตั้งแพ็กเกจเพิ่มเติมและสามารถกำหนดค่าได้โดยตรงในคำขอ

นี่คือตัวอย่างการใช้เซิร์ฟเวอร์ gmail smtp:

curl --url 'smtps://smtp.gmail.com:465' --ssl-reqd \
  --mail-from 'from-email@gmail.com' \
  --mail-rcpt 'to-email@gmail.com' \
  --user 'from-email@gmail.com:YourPassword' \
  -T <(echo -e 'From: from-email@gmail.com\nTo: to-email@gmail.com\nSubject: Curl Test\n\nHello')

นี่เป็นตัวเลือกที่ดีจริงๆ คุณสามารถสร้างรหัสผ่านเฉพาะแอปสำหรับบัญชี Google ของคุณและนี่เป็นเพียงการส่งอีเมลจากบัญชีของคุณเอง เจ๋งมาก!
dakdad

2
คำตอบที่ดีสุดท้ายอย่าลืมเปิดแอพที่ปลอดภัยน้อยกว่าเพื่อทำให้myaccount.google.com/lesssecureapps
ราบรื่น

@aliaksandr ควรเพิ่มจุดสุดท้ายนี้ในคำตอบของเขา ตามค่าเริ่มต้นตัวเลือกนี้ (ให้สิทธิ์การเข้าถึงแอพที่มีความปลอดภัยน้อยกว่า) ถูกปิดใช้งานและไม่ปรากฏให้เห็น อย่างน้อยถ้าคุณใช้บัญชี Gmail เป็นอีเมลของผู้ส่ง
EAmez

18

หากคุณต้องการแนบไฟล์บน Linux

echo 'mail content' | mailx -s 'email subject' -a attachment.txt username@stackoverflow.com

4
มันให้invalid headerข้อความสำหรับไฟล์ที่แนบมาของฉัน -Aตัวเลือกที่ถูกต้องเป็นตัวพิมพ์ใหญ่
Stephane

3
@ Stephane ตาม patrick-haugh, -a เป็นสวิตช์ไฟล์แนบ -A สำหรับคำสั่งบัญชี ดูหน้าคน: linux.die.net/man/1/mailx
MiaeKim

10

ใน terminal บน mac os หรือ linux os ของคุณพิมพ์รหัสนี้

mail -s (subject) (receiversEmailAddress)  <<< "how are you?"

สำหรับตัวอย่างลองสิ่งนี้

mail -s "hi" abc@example.com <<< "how are you?"<br>

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