使用服务器邮件功能,主要运用在服务器监控,如果程序出现问题,通过邮件进行提前预警,配合linux中shell指令,可通过代码实现邮件预警功能;并且设置简单,可控性强,对于集群运维人员来讲,可做到个性化批量设置监控项,通过设置阈值做到实时监控并预警。

安装教程

1、安装好的Ubuntu20.04中可能已经自带了邮件系统,先删除它们:

apt autoremove postfix
apt autoremove sendmail

2、安装我们需要的ssmtp和mailutils:

apt install ssmtp mailutils

3、编辑ssmtp的配置文件:vi /etc/ssmtp/ssmtp.conf

配置项如下

root=你的邮箱@163.com
mailhub=smtp.163.com:465
rewriteDomain=163.com
hostname=你的服务器名
FromLineOverride=YES
TLS_CA_FILE=/etc/ssl/certs/ca-certificates.crt
UseTLS=Yes
UseSTARTTLS=No
root=你的邮箱@163.com
AuthUser=你的邮箱@163.com
AuthPass=邮箱授权码
AuthMethod=LOGIN
FromLineOverride=yes

4、通过ssh发送邮件测试:

# 不带附件发邮件:
echo "This is a email content." | mail -s "Email Title" to@mail.com
# 带附件发送邮件(注意在Ubuntu下附件使用附件参数-A,与Centos中的-a不同,注意大小写):
echo "This is a email content." | mail -s "Email Title" -A /path/to/test.gz to@mail.com
# 要显示回复邮箱地址,加上-r参数,该邮箱可以为任意指定邮箱:
echo "This is a email content." | mail -s "Email Title" -r from@mail.com to@mail.com
# 指定发件人名字和发件人邮箱地址(与配置中的邮箱地址一致),避免以root@hostname的来显示发件人名字
echo "This is a email content." | mail -s "Email Title" -a "From: Someone <from@mail.com>" to@mail.com

5、问题处理:

若发送邮件有如下提示:

mail: cannot send message: Process exited with a non-zero status

查看错误日志,cat /var/log/mail.err,也有如下信息:

sSMTP[1234]: 501 mail from address must be same as auth orization user

则需要到/etc/ssmtp/revaliases配置文件中对发件人、服务器地址和端口进行指明,添加如下部分:

root:from@mail.com:smtp.exmail.qq.com
ubuntu:from@mail.com:smtp.exmail.qq.com

如果使用TLS发信,/etc/ssmtp/revaliases里的配置也需要变更一下端口到465:

root:address@mail.com:smtpdm.aliyun.com:465
ubuntu:address@mail.com:smtpdm.aliyun.com:465

发送邮件的日志和记录可以在/var/log/mail.log中查看。

若在/var/log/mail.log出现550错误

Nov 2 23:37:45 ser526160889055 sSMTP[63626]: Unable to set TLS_CA_FILE="/etc/ssl/certs/ca-certificates.crt"
Nov 2 23:37:45 ser526160889055 sSMTP[63626]: Creating SSL connection to host
Nov 2 23:37:46 ser526160889055 sSMTP[63626]: SSL connection using ECDHE_RSA_AES_128_GCM_SHA256
Nov 2 23:37:47 ser526160889055 sSMTP[63626]: 550 The mail may contain inappropriate words or content.
Nov 2 23:44:40 ser526160889055 sSMTP[64446]: Unable to set TLS_CA_FILE="/etc/ssl/certs/ca-certificates.crt"
Nov 2 23:44:40 ser526160889055 sSMTP[64446]: Creating SSL connection to host
Nov 2 23:44:40 ser526160889055 sSMTP[64446]: SSL connection using ECDHE_RSA_AES_256_GCM_SHA384
Nov 2 23:44:41 ser526160889055 sSMTP[64446]: Sent mail for piouskirt@163.com (221 Bye) uid=0 username=root outbytes=444

这个错误目前测试在qq邮箱中出现,使用163邮箱测试可以正常使用。