centos linux 下利用命令mail发送邮件

linux命令行发送邮件

一、准备工作,安装mail这个命令
如果提示mail: command not found
[root@MoneySlow ~]# mail -s "password" money@moneyslow.com < /etc/passwd
-bash: mail: command not found
那么就是没有安装mail命令,此时需要安装mail命令
[root@MoneySlow ~]# yum install mailx -y
[root@MoneySlow ~]# rpm -qa|grep mail
libreport-plugin-mailx-2.0.9-19.el6.x86_64
mailx-12.4-7.el6.x86_64
procmail-3.22-25.1.el6.x86_64
mailcap-2.1.31-2.el6.noarch
sendmail-8.14.4-8.el6.x86_64

二、还是准备工作,Linux服务器mail程序本身就是调用sendmail来进行邮件发送的,sendmail服务器提供对外的邮件发送功能。
CentOS默认不能发送邮件,可以安装一个sendmail程序
[root@MoneySlow ~]# yum -y install sendmail
[root@MoneySlow ~]# /etc/init.d/sendmail start
Starting sendmail: [ OK ]
Starting sm-client: [ OK ]
[root@MoneySlow ~]# chkconfig sendmail on

三、命令发送邮件的三种方式
第一种:直接发
[root@MoneySlow ~]# mail -s "test" money@moneyslow.com
asdfasdfa
asdfasd
ssd
EOT
第一行是输入的命令,-s表示邮件的主题,后面的money@moneyslow.com则是邮件的接收人,输入完这行命令后回车,会进入邮件正文的编写,可以输入任何文字,比如上面的三行。
当邮件正文输入完成后,需要按CTRL+D结束输入,此时会提示你输入Cc地址,即邮件抄送地址,没有直接回车就完成了邮件的发送。

第二种:使用管道进行邮件发送
[root@MoneySlow ~]# echo "hello,echo"|mail -s "echo" money@moneyslow.com
使用管道直接敲入这行命令即可完成邮件的发送,其中echo后的是邮件正文。

第三种:使用文件进行邮件发送
[root@MoneySlow ~]# mail -s "password" money@moneyslow.com < /etc/passwd
使用上面的命令后,我们就可以把/etc/passwd文件的内容作为邮件的内容发送给money@moneyslow.com了
很多情况下,我们也需要使用邮件来发送附件,在linux下使用mail命令发送附件也很简单,不过首先需要安装uuencode软件包,这个程序是对二进制文件进行编码使其适合通过邮件进行发送,直接使用centos的yum源可能找不到uuencode命令的包sharutils,我这里使用了网易Yum源
[root@MoneySlow yum.repos.d]# yum -y install sharutils
[root@MoneySlow yum.repos.d]# uuencode CentOS6-Base-163.repo 163_yum_repo |mail -s "附件" pengyl2@finchina.com < /etc/passwd
[root@MoneySlow yum.repos.d]#
CentOS6-Base-163.repo 文件作为邮件的附件发送出去了。uuencode有两个参数,第一个是要发送的文件CentOS6-Base-163.repo,第二个是显示的文件名称163_yum_repo。

四、利用正规的smtp服务器发送
以上提到的命令直接发送方式,大部分情况下会被识别为垃圾邮件,所以使用外部smtp(正规的SMTP比如xxx@163.com)来发送邮件,就比较靠谱了。
bin/mail会默认使用本地sendmail发送邮件,这样要求本地的机器必须安装和启动Sendmail服务,而通过修改配置文件/etc/mail.rc(/etc/nail.rc)可以使用外部SMTP服务器,可以达到不使用sendmail而用外部的smtp服务器发送邮件的目的。
[root@MoneySlow ~]# vim /etc/mail.rc #文末添加以下
67 set from=money@moneyslow.com smtp=smtp.moneyslow.com
68 set smtp-auth-user=username smtp-auth-password=password smtp-auth=login

[root@MoneySlow ~]# source /etc/mail.rc
[root@MoneySlow ~]# mail -s "51cto" abc@moneyslow.com < /etc/passwd
from:发送的邮件地址,对方显示的发件人
smtp:发生的外部smtp服务器的地址
smtp-auth-user:外部smtp服务器认证的用户名
smtp-auth-password:外部smtp服务器认证的用户密码
smtp-auth:邮件认证的方式