วิธีการส่งจดหมายจากบรรทัดคำสั่ง?


215

วิธีการส่งจดหมายจากบรรทัดคำสั่ง?


1
ubuntuforums.org/showthread.php?t=780509อาจช่วยคุณได้
ผู้ใช้

1
คุณยังสามารถใช้ต้นสน
Kaveh

1
คุณยังสามารถติดตั้ง msmtp และทำตามคำแนะนำที่อธิบายไว้ในArchWiki
Thiago Perrotta

2
มันเลวร้ายเกินไปคำตอบสำหรับเรื่องนี้ล้าสมัย เป็นคำถามสำคัญที่สามารถใช้การสอนที่ดี
6005

คำตอบ:


36

ลองติดตั้งMutt E-mail ไคลเอ็นต์ ตัวเลือกอื่น ๆ โดยใช้ emacs กับGNUS ตัวเลือกอื่น ๆ ก็มีให้เช่นกัน ... IMHO คุณควรใช้รายละเอียดเพิ่มเติมในคำถามของคุณหรือตอบคำถามต่าง ๆ ที่คุณจะได้รับ :-)


2
ยอมรับสิ่งนี้เนื่องจากไม่ต้องการการกำหนดค่าใด ๆ และค่อนข้างใช้งานง่าย
Olivier Lalonde

21
รอ. เป็นมิตรกับผู้ใช้ไหม? หนึ่งซับที่บ้าที่สุดที่ฉันเคยอ่านมาวันนี้ :)
Stann

155
  1. ติดตั้งssmtp ติดตั้ง ssmtp :

    sudo apt-get install ssmtp
    
  2. แก้ไขไฟล์ ssmtp config:

    gksu gedit /etc/ssmtp/ssmtp.conf
    
  3. ต่อท้ายข้อความต่อไปนี้:

    root=username@gmail.com
    mailhub=smtp.gmail.com:465
    rewriteDomain=gmail.com
    AuthUser=username
    AuthPass=password
    FromLineOverride=YES
    UseTLS=YES
    
  4. เรียกใช้ ssmtp และระบุที่อยู่อีเมลของผู้รับ:

    ssmtp recepient_name@gmail.com
    
  5. ระบุรายละเอียดข้อความดังต่อไปนี้:

    To: recipient_name@gmail.com
    From: username@gmail.com
    Subject: Sent from a terminal!
    
    Your content goes here. Lorem ipsum dolor sit amet, consectetur adipisicing.
    (Notice the blank space between the subject and the body.)
    
  6. กดCtrl+ Dเพื่อส่ง


คุณสามารถใส่ข้อความในไฟล์และส่งดังต่อไปนี้:

ssmtp recipient_name@gmail.com < filename.txt

29
รู้สึกแปลกใจที่ทิ้งรหัสผ่านอีเมลของฉันไว้ในไฟล์บางไฟล์บนคอมพิวเตอร์ ปลอดภัยไหม
oadams

2
@ loadams ไม่ปลอดภัยมาก ใช้การยืนยันแบบสองขั้นตอนเพื่อลดความเสี่ยงของคุณหรือใช้เกตเวย์อีเมลที่ไม่ต้องการรหัสผ่านเช่น ISP ของคุณ
itsadok

5
อย่าติดตั้ง ssmtp บนเซิร์ฟเวอร์ที่ติดตั้ง postfix Postfix จะถูกลบ เพียงแค่ใช้ sendmail user@example.com <file.txt ซึ่งจะทำงานกับ postfix หรือ ssmtp
Alistair Buxton

2
อีกสิ่งที่แปลกที่ฉันต้องการแบ่งปันที่นี่คือมันไม่ทำงานสำหรับฉันเมื่อฉันมีรหัสผ่านยาว / ซับซ้อน แต่ทำงานเมื่อฉันแก้ไขเป็นรหัสผ่านง่ายแปลก แต่จริง ฉันก็ได้ยินเหมือนกันจากคนอื่น แต่ก็ลองหลังจากพยายามส่งอีเมลไม่สำเร็จหลายครั้ง & ทันทีที่ฉันเปลี่ยนรหัสผ่านทำให้ฉันประหลาดใจก็ทำงานได้;)
Rajat Gupta

หาก Gmail ไม่อนุญาตให้เซิร์ฟเวอร์ของคุณเข้าถึงให้ลงชื่อเข้าใช้ Gmail บนเซิร์ฟเวอร์ด้วยเบราว์เซอร์บรรทัดคำสั่ง askubuntu.com/questions/460022/using-terminal-as-a-web-browser
Lee

87

เวลาส่วนใหญ่คุณไม่จำเป็นต้องกำหนดค่าเซิร์ฟเวอร์ SMTP คุณสามารถใช้mailจาก commandline (หากยังไม่มีให้ติดตั้งด้วยsudo apt-get install mailutils) (หรือถ้าคุณอยู่บนเซิร์ฟเวอร์ที่มีการกำหนดค่า sendmail ฯลฯ )

marco@dagobah:~$ mail -v marco.ceppi.use@gmail.com
Subject: Hello World!
This is an email to myself.

Hope all is well.
.
Cc: 

คุณยุติข้อความด้วย.บรรทัดเดียว นั่นคือเวลาที่mailจะให้คุณCc:ป้อนข้อมูล (หรือเว้นว่างไว้) mailจากนั้นพิมพ์ข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่พยายามทำรวมถึงรายละเอียดการประมวลผลการเชื่อมต่อการส่งและการรับข้อมูลจากเซิร์ฟเวอร์อีเมล


28
ฉันจะผนวกคำตอบเพื่อรวม "sudo apt-get install mailutils" เนื่องจากไม่มีอยู่ในการติดตั้ง Ubuntu 10.04 ที่สะอาด นอกจากนี้การยกเลิกข้อความด้วย ในบรรทัดเดียวใช้งานไม่ได้ ฉันต้อง "Ctrl-D" แทน ท้ายสุดข้อความไม่ผ่าน!
Olivier Lalonde

7
@OlivierLalonde sudo apt-get install mailutilsจะติดตั้งเซิร์ฟเวอร์ SMTP postfixซึ่งอาจจะมีน้ำหนักเกินเล็กน้อยสำหรับบางคน
vaab

5
mailutils จะติดตั้ง mysql ด้วย!
chmike

17
-v ตัวเลือกไม่ได้อยู่ในการติดตั้งอีเมล 2.99.98 ของฉัน, ต้องใช้ Ctrl + D เพื่อสิ้นสุด
markmnl

2
โปรดอัปเดตคำถามนี้มันล้าสมัยแล้ว
Blauhirn

47
apt-get install libio-socket-ssl-perl libnet-ssleay-perl sendemail

การใช้งาน:

sendemail -f fromuser@gmail.com -t touser@domain.com -u subject -m "message" -s smtp.gmail.com:587 -o tls=yes -xu gmailaccount@gmail.com -xp gmailpassword 

หากคุณไม่ต้องการระบุรหัสผ่านในบรรทัดคำสั่ง (โดยทั่วไปไม่ใช่สิ่งที่ควรทำ) คุณสามารถละเว้นพารามิเตอร์นั้นและ sendemail จะแจ้งให้คุณใส่รหัสผ่าน ... และแสดงบนหน้าจอ แต่อย่างน้อยที่สุด มันจะไม่อยู่ในประวัติบรรทัดคำสั่งของคุณ


ส่งอีเมลจากบัญชี GMail โดยใช้sendmailความมั่นใจมากที่สุดสะดวกมาก ขอขอบคุณ.
Mark Tomlin

ค้นหาโปรแกรมปะแก้ที่นี่เพื่อไม่ให้สะท้อนรหัสผ่าน
อรุณ

-s smtp.gmail.com:587ผมต้องระบุพอร์ตด้วย
Joe Mornin

5
เพิ่มช่องว่างหน้าบรรทัดคำสั่งเพื่อไม่บันทึกไว้ในประวัติบรรทัดคำสั่ง
2560

อีกวิธีที่จะไม่แสดงบนหน้าจอ bash: บันทึกรหัสผ่านไปยังไฟล์จากนั้นตัวแปรจากไฟล์สู่สภาพแวดล้อมตัวอย่าง: pass=$(cat my_password); sendemail... -xp $name ...และแน่นอนถ้าคุณเรียกมันโดยทางโปรแกรมคุณสามารถทำสิ่งที่คล้ายกันเช่น: ruby system("sendemail ... -xp #{File.read 'my_password'}...")และอาจล้มเหลว ในครั้งแรกคุณควรได้รับอีเมลไปยังบัญชีดังกล่าวเพื่อแนะนำให้คุณ "เปิดใช้งานแอปที่ปลอดภัยน้อยลง" จากนั้นจะสามารถใช้งานได้
rogerdpack

23

mpack เป็น commandline วิธีที่ยอดเยี่ยมในการส่งไฟล์แนบ

apt-get install mpack

การใช้งาน:

mpack -s "file you wanted" ./data.pdf loser@supergoober.cn

20

คุณต้องมี MTA เพื่อส่งจดหมาย สำหรับสิ่งนี้ใช้ postfix:

sudo apt-get install postfix

ในการส่งอีเมล:

echo "test message" | mailx -s 'test subject' myemail@mydomain.com

ช่วยด้วย


คุณต้องติดตั้ง mailutils สำหรับ mailx ด้วยใช่ไหม
Nick

4
ฉันหวังว่ามันง่ายจริงๆ แต่ถ้าคุณเป็นคนที่พิเศษมากมันจะไม่ทำงาน ISP 99.9999% จะไม่สนใจจดหมายจากเซิร์ฟเวอร์ postfix ส่วนตัวเพราะ 9.99999 ครั้งจาก 10 รายการที่เป็นสแปมเมอร์
Cerin

สิ่งนี้ใช้ไม่ได้สำหรับฉันมันขอให้ติดตั้งmailutilsเมื่อฉันป้อนสิ่งนี้ลงในเทอร์มินัล
Mostafiz Rahman

ไปข้างหน้าและติดตั้ง mailutils คุณไม่จำเป็นต้องใช้ postfix IIRC
uav

@Cerin ถูกต้อง ฉันต้องการฟังก์ชั่นการส่งจดหมายที่ง่ายมากสำหรับงาน cron หากคุณได้รับผ่านบัญชี gmail คุณสามารถตั้งค่าตัวกรองสำหรับอีเมล (ผ่านคำหลักหรือที่อยู่จาก) และ gmail จะอนุญาตให้ส่ง
Carrie Kendall

15

ติดตั้งแพ็กเกจsendmailจากนั้นพิมพ์

sendmail -t receiver@example 

จากนั้นเขียนอีเมลของคุณจากนั้นกด Ctrl + D


10
mail -s "subjet" -a "attchedfile_name" someone@dest_email.com

หรือ

cat "afile" | mail -s "subject" someone@dest_email.com

เพียงเพิ่มสำหรับการทดสอบง่าย ๆ : echo "Hello world!" | mail -s "Hello" mail@example.org
Bohne

2
หากใครบางคนไม่มีคำสั่ง mail ให้เรียกใช้: sudo apt-get install mailutilsใน Ubuntu / Debian หรือyum install mailxใน CentOS / Redhat
Giovanni Benussi

9

คุณสามารถส่งอีเมลจากบรรทัดคำสั่งด้วยTelnetหรือNetCat

ทุกอย่างจะมีการอธิบายที่นี่

hanoo@hp_laptop% nc 127.0.0.1 25
220 hp_laptop.localdomain ESMTP Postfix
EHLO man
250 hp_laptop.localdomain
MAIL FROM: <netcat@postfix.com>
250 2.1.0 Ok
RCPT TO: <target@host.com>
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
This is the body of my mail,
this is the second line...
.
250 2.0.0 Ok: queued as 9C12E7F404

2
เป็นการยากที่จะใช้ SSL เมื่อใช้วิธีนี้;)
iX3

1
@ iX3 เพียงแค่ใช้swaksและคุณกำลังดีด้วย SSL / TLS เกินไป ;-)
Germar

หรือopenssl s_client -starttls smtp ...
Raman

7

หากคุณพยายามส่งอีเมลจากระบบ whitch จะไม่เรียกใช้อีเมลเซิร์ฟเวอร์ของคุณเอง (เช่นระบบเดสก์ท็อป) คุณจะต้องติดตั้งบางอย่างเช่นnullmailerหรือesmtpซึ่งจะส่งต่อจดหมายท้องถิ่นของคุณไปยังอีเมล "ของจริง" เซิร์ฟเวอร์

ในฐานะที่เป็นเครื่องมือบรรทัดคำสั่งคุณสามารถติดตั้งเมลหรือ mailx (แพ็คเกจ mailutils, heirloom-mailx หรือ bsd-mailx) หากคุณต้องการไฟล์แนบลองใช้ biabam


1
ฉันชอบ bsd-mailx สำหรับคำสั่ง -E และ cronjobs
meffect

6

ฉันไม่เคยลอง แต่มีmailคำสั่งที่สามารถส่งอีเมลได้ ดูอีเมลคน

ในการทดสอบอีเมลท้องถิ่น:

echo message | mail username@localhost

6
sudo apt-get install sharutils mailutils
uuencode filename filename | mail user@example.com

โดยที่filenameเหมือนกัน: มันหมายถึงไฟล์อินพุตและไฟล์รีโมต


sudo apt-get install sharutilsforuuencode
Janus Troelsen

1
mailutils ติดตั้ง mysql! oO
chmike

3

คุณสามารถลองสิ่งนี้:

mail name@mailserver.com -s "Attached file" <<EOF                 
Hi

~| uuencode $HOME/filename.txt filename.txt

EOF

มันทำงานร่วมกับGNU Mailutilsตรวจสอบเว็บไซต์สำหรับข้อมูลเพิ่มเติม


2

วิ่ง :

sudo apt-get install ssmtp
sudo -H gedit /etc/ssmtp/ssmtp.conf

จำเป็นต้องเพิ่มสิ่งต่อไปนี้:

# The user that gets all the mails (UID < 1000, usually the admin)
root=yourusernameofgmail@gmail.com

# The mail server (where the mail is sent to), both port 465 or 587 should be acceptable
# See also https://support.google.com/mail/answer/78799
mailhub=smtp.gmail.com:587

# The address where the mail appears to come from for user authentication.
rewriteDomain=gmail.com

# Use SSL/TLS before starting negotiation
UseTLS=Yes
UseSTARTTLS=Yes

# Username/Password
AuthUser=yourusernameofgmail
AuthPass=yourGmailPassowrd
AuthMethod=LOGIN

# Email 'From header's can override the default domain?
FromLineOverride=yes

วิ่ง :

sudo -H gedit /etc/ssmtp/revaliases

เข้าสู่ที่นั่น:

root:yourusernameofgmail@gmail.com:smtp.gmail.com:587

เปิดใช้งาน"แอปที่ปลอดภัยน้อยลง"ใน Gmail:
https://support.google.com/accounts/answer/6010255?hl=th

ทดสอบด้วยการรันสิ่งต่อไปนี้บนเทอร์มินัล:

echo "Body of mail is abc" | mail -s "Subject is xyz" "someusername@gmail.com"`

1

นอกจากนี้ฉันยังได้รับข้อผิดพลาดนี้

echo "Test message from Linux server using ssmtp" | sudo ssmtp -vvv  somebody@mil.gov
[<-] 220 smtp.gmail.com ESMTP v193sm19198825qka.18 - gsmtp
[->] EHLO localhost
[<-] 250 SMTPUTF8
[->] STARTTLS
[<-] 220 2.0.0 Ready to start TLS
[->] EHLO localhost
[<-] 250 SMTPUTF8
[->] AUTH LOGIN
[<-] 334 VXNlcm5hbWU6
[->] aG94Z2VuZUBrrrFpbC5jb20=
[<-] 334 UGFzweliecmQ6
[<-] 534 5.7.14  https://support.google.com/mail/answer/78754 v193sm19198825qka.18 - gsmtp
ssmtp: Authorization failed (534 5.7.14  https://support.google.com/mail/answer/78754 v193sm19198825qka.18 - gsmtp)

SOLUTION: ทำการรีเซ็ตรหัสผ่าน gmail แม้ว่ารหัสผ่านปัจจุบันจะถูกต้อง ... อาจเป็นการป้องกันความปลอดภัยของ Google

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