IT技术博客大学习 共学习 共进步

用msmtp代替系统自身的sendmail

snnn的blog 2012-12-24 13:31:35 浏览 2,601 次

   sendmail是一个漏洞奇多、配置超级麻烦的东西,所以很多系统管理员都把它禁用了。但是如此一来,如果crontab脚本执行出错,就只有天知地知了。

   sendmail有很多轻量级的替代,我之前一直在用ssmtp,但是这东西已经停止维护了,我在google 搜它的源代码都搜不到。于是我就只好找其它的替代,于是就找到了msmtp:http://msmtp.sourceforge.net/

   1. 安装:

   下载解压之后,

   ./configure --prefix=/usr --libdir=/usr/lib64 --sysconfdir=/etc

   make

   make install

   即可。

   2. 配置

   如果你像我这样,编译的时候加上了--sysconfdir=/etc,那么全局的配置文件就在/etc下面,名为msmtprc。

   这是我的配置:

   $ cat /etc/msmtprc  

   defaults    

   tls off    

   logfile /var/log/msmtp.log

   account default  

   host mail.tudou.com    

   from xxxx@tudou.com    

   domain tudou.com    

   auth login    

   user sunchangming    

   password xxxx

   3.让mail命令使用msmtp而不是sendmail

   这个很简单,在/etc/mail.rc的末尾加一行

   set sendmail="/usr/bin/msmtp"

   4.让crontab用msmtp

   打开/etc/sysconfig/crond,设置一下CRONDARGS的值

   CRONDARGS="-m \'/usr/bin/msmtp -t\'"

   请注意这里一定要加-t。否则msmtp是从command line arg而不是stdin读取收件人列表。我之前就是因为没有加这个,而导致cron老是报告

   Sep 24 18:06:01 a02 crond[8023]: (app_admin) MAIL (mailed 52 bytes of output but got status 0x0040 )

   独家秘方哦!google搜不到这个答案的。