利用Mailx发送邮件


为了监控服务器运行情况,防止出故障后,长时间得不到解决,客户不满意。所以打算采用被动通知的方式,提醒运维人员及时处理系统故障。解决方案有上监控系统,比如Prometheus、Zabbix等,但项目本身不大,故采用免费的Mailx发送邮件信息来解决。

环境准备

序号系统备注
ACentos 7
BQQ邮箱

安装

在A服务器上安装Mailx,一般发行自带,如何没有利用yum安装

1
# yum install samba

配置Mailx

配置文件 /etc/mail.rc

1
2
3
4
5
6
7
8
9
10
11
12
# 邮箱账户,发件人的电子邮件地址
set from=test@qq.com
# smtp 服务器地址,smtps是ssl,普通用smtp即可
set smtp=smtps://smtp.qq.com:465
# SMTP认证的用户名
set smtp-auth-user=test@qq.com
#MTP认证的密码,QQ邮箱为授权密码而非邮箱密码
set smtp-auth-password=xxxxx
# 是否验证SSL证书,配置 SSL 证书就可以注释掉
set ssl-verify=ignore
# 设置 nss 配置目录, SSL 证书目录
set nss-config-dir=/root/.certs

配置SSL证书

1
2
3
4
5
mkdir -p /root/.certs/
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -L -d /root/.certs

为了防止出现发送邮件警告提示,还需要进入邮箱SSL证书存放目录/root/.certs里执行如下命令

1
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt

返回如下提示即可

1
**Notice: Trust flag u is set automatically if the private key is present.**

测试

1
echo "test body" | mail -s "test"  totest@163.com

如果控制台没有错误和邮箱里面已经收到了邮件,就证明配置成功了,接下来就可以是写业务的监控脚本。

总结

SMTP邮件服务器默认端口是25,现在25端口管控比较严格,如果25端口不可以用,就尝试采用SSL方式对应的其他端口

参考

Centos配置Mailx发送邮件
Linux下利用mailx结合QQ邮箱发送系统邮件提醒等