在Linux系统中,我们可以使用各种软件之间的关联与配合,完成我们想要完成的工作,这也正是Linux系统人性化的一方面,而MUTT+MSMTP的邮件组合便为我们提供了不错的应用解决方案。
应用背景:
公司新上线了一个项目,设计到的服务器有9台,公司想通过邮件的方式来监控主机的运行状态,以及判断服务器上的资源是否可用,如果不可用自动执行重启应用的操作,并且发送一封Email邮件通知相关人员。
在了解了需求之后,我们就可以整理出自己的一套解决方案,首先在这个项目需求中涉及到了Email邮件的发送,我们就会想到搭建Email邮件服务器,例如sendmail、postfix等等,但是这里我们仅仅是需要发送邮件,对于费尽心思搭建的一套Email邮件服务器来讲简直就是浪费资源。对于这样简单发送邮件的需求,我们用Msmtp客户端加上发送邮件需要的Mutt程序完全就可以实现了。
Msmtp (下载地址:)
Msmtp是一款专门负责邮件发送的客户端软件,基于GPL发布。支持TLS/SSL、DNS模式、IPv6、服务器端认证、多用户等特性。该软件和mpop是姊妹软件。
Msmtp软件安装
tar jxf msmtp-1.4.16.tar.bz2
./configure --prefix=/usr/local/msmtp
make
make install
MUTT (系统一般自带 下载地址:)
mutt是linux下的一个email程序。Mutt 显然是一个 Unix 的邮件程序,它跟一般的 Windows 邮件程序不同,它不是一个包罗万象的大杂烩。你甚至会发现它根本不直接发出邮件,它从来不自己编辑邮件,它从来不自己对邮件进行加密和数字签名,Mutt 更像一个文件管理器,只不过它管理的是email。它的功能是借助各个最强大的程序来实现的。这符合 UNIX 的设计思想。
Mutt安装
tar zxf mutt-1.5.21.tar.gz
./configure
make
make install
软件的安装非常简单,安装之后我们就可以对其进行配置了,比较有意思的是这两个程序的配置文件都为隐藏文件,路径为家目录。
Msmtp
cd ~
vi .msmtprc
host smtp.163.com #你的邮件服务器地址
tls off #关闭tls
auth plain #设定登录方式
from youraddress@163.com #发送Email的邮件地址
user yourname #发送Email的用户名
password yourpassword #发送Email的用户名密码
chmod 600 .msmtprc #不允许其他用户访问该文件
touch .msmtp.log #创建日志记录文件
Mutt
cd ~
vi .muttrc
set sendmail="/usr/local/msmtp/bin/msmtp" #指定msmtp执行的路径
set use_from=yes #指定是否显示来自用户(别名)
set realname="阿布" #发件人别名
set from=youradress@163.com #指定要使用的email地址
set rfc2047_parameters=yes #解决附件中文乱码的问题
set charset="GBK" #指定发送的邮件文字编码(与服务器保持一致)
软件配置完成后我们可以使用下面的命令来进行测试
echo “这里输入的是你邮件的正文内容” | mutt -s ‘这里是你邮件的标题’ test@test.com(指定要发送到谁的邮箱)
正常接收到测试邮件后,说明程序的安装及配置是没有问题的,接下来就可以配合系统来发送监控邮件了,而我们只需要将系统关键的信息提取出来即可,举例如下:
vi sendmail.sh
#!/bin/bash
cpu=`vmstat 1 2 | sed -n '$p' |awk '{printf "%8s |%6s |%9s", $13,$14,$15}'`
mem=`free | grep 'buffers/cache' | awk '{print $4}'`
swap=`free | grep 'Swap' | awk '{print $4}'`
echo “您CPU目前使用量为:$cpu 内存使用量为:$mem 虚拟内存使用量为:$swap”
chmod 755 sendmail.sh
./sendmail.sh | mutt -s ‘system_monitor’ myemailtest@163.com
同样的我们也可以使用它来监控我们的系统应用,例如监控Apache的运行情况,如果80端口不能正常工作,那么重新启动Apache应用,同时发送一封Email通知相关人员。
vi appcheck.sh
#!/bin/bash
curl
if [ $? -eq 0 ];then
echo “is ok!”
else
/usr/local/apache/bin/apachectl restart
echo -e “您的Apache已于`date +%Y-%m-%d-%H:%M`执行重启,请您关注此信息!”
chmod 755 appcheck.sh