如何从命令行发送邮件?


Answers:



155
  1. 安装ssmtp 安装ssmtp

    sudo apt-get install ssmtp
    
  2. 编辑ssmtp配置文件:

    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 2010年

2
@oadams不是很安全。使用两步验证来降低风险,或者使用不需要密码的邮件网关(例如ISP的网关)。
itsadok 2012年

5
不要在安装了postfix的服务器上安装ssmtp。后缀将被删除。相反,只需使用sendmail user@example.com <file.txt,它将与postfix或ssmtp一起使用。
Alistair Buxton

2
我想在这里分享的另一个奇怪的事情是,当我使用长而复杂的密码时,它对我不起作用,但是当我将其修改为简单的密码时,它对我却不起作用,但很奇怪。我也从其他人那里听到了同样的声音,但是在尝试发送邮件很多次失败之后尝试了此操作,一旦我简化了密码,令我惊讶的是,它就起作用了;)
Rajat Gupta 2014年

如果Gmail不允许您的服务器访问,请使用命令行浏览器登录服务器上的Gmail。askubuntu.com/questions/460022/using-terminal-as-a-web-browser
Sanghyun Lee

87

大多数情况下,您不需要配置SMTP服务器,而只需mail在命令行中使用即可(如果尚不存在,请使用进行安装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 2010年

7
@OlivierLalonde sudo apt-get install mailutils将安装一个SMTP服务器postfix,该服务器对于某些人而言可能有些偏重。
vaab 2013年

5
mailutils也将安装mysql!
chmike 2014年

17
-v选项不在我的邮件2.99.98安装中,还必须使用Ctrl + D结束
markmnl 2014年

2
请更新此问题,它已过时。
布劳恩

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最确定的方式发送邮件非常方便。谢谢。
马克汤姆林

在此处查找补丁不回显密码。
2015年

我必须使用指定端口-s smtp.gmail.com:587
乔·莫宁

5
在命令行之前添加一个空格以不将其保存在命令行历史记录中
guhur 17'Jan

不将其显示在bash屏幕上的另一种方法:将密码保存到文件,然后从文件保存到环境变量,例如:pass=$(cat my_password); sendemail... -xp $name ...当然,如果您以编程方式调用它,则可以执行类似的操作,例如:ruby system("sendemail ... -xp #{File.read 'my_password'}...")也会失败第一次,您应该收到一封发送到该帐户的电子邮件,建议您“启用安全性较低的应用”,然后它才能正常工作。
rogerdpack

23

mpack是发送文件附件的出色命令行方法。

apt-get install mpack

用法:

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

20

您需要一个MTA来发送邮件。为此,请使用后缀:

sudo apt-get install postfix

发送电子邮件:

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

救命


您还需要为mailx安装mailutils,对吗?
尼克

4
我希望这真的很简单,但是除非您是一个非常特别的人,否则它将无法正常工作。99.9999%的ISP将忽略来自私人后缀服务器的邮件,因为9.99999十分之十是垃圾邮件发送者。
塞林2015年

这对我不起作用,mailutils当我将其输入终端时它要求安装
Mostafiz Rahman

继续并安装mailutils。您不需要后缀IIRC。
uav

@Cerin是正确的。但是,对于cron作业,我需要非常简单的邮件发送功能。解决方法是,如果通过gmail帐户接收邮件,则可以为电子邮件设置过滤器(通过关键字或发件人地址),而gmail将允许其发送。
凯莉·肯德尔

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

只是为了便于测试而添加:回显“ Hello world!” | mail -s“ Hello” mail@example.org
Bohne 2015年

2
如果某人没有mail命令,只需运行:sudo apt-get install mailutils在Ubuntu / Debian或yum install mailxCentOS / Redhat中
Giovanni Benussi 2016年

9

您可以使用TelNetNetCat从命令行发送电子邮件。

一切都在这里解释。

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 2012年

1
@ iX3只需使用swaks,您也可以使用SSL / TLS ;-)
Germar

openssl s_client -starttls smtp ...
拉曼

7

如果您尝试从系统发送电子邮件,而whitch并没有运行自己的电子邮件服务器(即台式机系统),则需要安装nullmaileresmtp之类的东西,它们会将本地邮件转发到“真实”邮件服务器。

作为命令行工具,您可以安装mail或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 2012年

1
mailutils安装mysql!oO
chmike 2014年

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=zh_CN

通过在终端上运行以下命令进行测试:

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)

解决方案:即使当前密码正确,也要重置gmail密码...可能是Google安全措施

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.