linux mail命令发送邮件

email info

在 Debian / Ubuntu 系统:

apt-get install mailutils
apt-get install sharutils  #支持附件发送,使用uuencode
apt-get install sendmail
apt-get install sendmail-cf

sendmail

启用sendmail

service start sendmail #systemctl start sendmail.service

sendmail配置

sendmail默认只会为本机用户发送邮件,只有把它扩展到整个Internet,才会成为真正的邮件服务器,sendmail的配置文件:/etc/mail/sendmail.mc

DAEMON_OPTIONS(`Family=inet,  Name=MTA-v4, Port=smtp,Addr=127.0.0.1')dnl

将Addr=127.0.0.1修改成0.0.0.0

修改之后产生新的配置文件:

mv sendmail.cf sendmail.cf~   #做一个备份
m4 sendmail.mc > sendmail.cf  #>的左右有空格,提示错误没有安装sendmail-cf

安装mailutils

安装过程中会让你选择一种配置类型。一般情况下,我们需要选择第二种类型:Internet Site

mailutils

No configuration 表示不要做任何配置;
Internet Site 表示直接使用本地SMTP服务器发送和接收邮件;
Internet with smarthost 表示使用本地SMTP服务器接收邮件,但发送邮件时不直接使用本地SMTP服务器,
    而是使用第三方smart host来转发邮件;
Satellite system 表示邮件的发送和接收都是由第三方smarthost来完成。
Local only 表示邮件只能在本机用户之间发送和接收。

发送有主题的邮件

echo "Email text" | mail -s "Test Subject" user@example.com #-s的用处是指定邮件的主题

从文件中读取邮件内容并发送

mail -s "message send from file" user@example.com < /path/to/file

将从管道获取到的echo命令输出作为邮件内容发送

echo "This is message body" | mail -s "This is Subject"
user@example.com

发送带附件的邮件

echo "Body with attachment"| mail -a foo.tar.gz -s "attached file" user@example.com

uuencode

邮件传输系统最初是被设计来传送7位编码(类似ASCII)的内容的。这就意味这它是用来发送文本内容,而不能发会使用8位的二进制内容(如程序文件或者图片)。uuencode(“UNIX to UNIX encoding”,UNIX之间使用的编码方式)程序用来解决这个限制。使用uuencode,发送端将二进制格式的转换成文本格式来传输,接收端再转换回去。
我们可以简单地使用uuencode和mailx或者mutt配合,来发送二进制内容,类似这样:

uuencode example.jpeg example.jpeg | mail user@example.com

注意:
1、/etc/hosts中修改为:

127.0.0.1    localhost localhost.localdomain jason #jason计算机主机名

参考资料

1、发送邮件的命令行工具
2、ubuntu搭建简易postfix邮箱服务器