用msmtp代替系统自身的sendmail

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

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

安装:

下载解压之后,

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

make

make install

即可。

配置

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

这是我的配置:

文件: /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

很多SMTP服务器现在支持TLS加密。如果要启用TLS,那么把tls off改成

tls on
tls_trust_file /etc/ssl/certs/ca-bundle.crt

让mail命令使用msmtp而不是sendmail

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

set sendmail="/usr/bin/msmtp"

让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搜不到这个答案的。

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥