工作中我们会碰到服务器上的各种各样错误,这些错误我们可以做各种各样的捕获、打印、记录。但是光这些是不够的的,对应的负责人员要怎么知道这件事?最简单的办法就是发一封邮件(当然也可以使用其他的系统监控软件进行报警通知,这里不做讨论)
CentOS 7 内置了 mail
,可以直接使用,如果觉得依赖库太老可以自己删除掉重新 yum
安装即可。
- 删除
# 查找已存在的
$ rpm -qa | grep mailx
$ rpm -qa | grep sendmail
# 删除
$ rpm -e xxx
# 安装
$ yum -y install mailx sendmail
# 配置发件人信息
$ vim /etc/mail.rc
......
# 这里配置的是网易企业免费邮箱的 SMTP 服务地址
set from=我的服务器<xxxx@163.com>
set smtp=smtp.ym.163.com
set smtp-auth-user=xxxx@163.com
set smtp-auth-password=xxxxxxxxx
set smtp-auth=login
......
- 发送邮件测试
$ echo '内容' | mail -s '标题' xxxxxx@163.com
正常情况下这里已经可以发送邮件了,也有可能你使用的服务器是阿里云或者其他服务提供商的,他们会封禁 25 端口,导致出现以下错误:
could not connect: 连接超时
"/root/dead.letter" 11/356
. . . message not sent.
或者
contains invalid character ‘\342’
Resolving host smtp.163.com . . . done.
Connecting to 220.181.12.17 . . .Connecting to 220.181.12.18 . . .
163 邮箱的协议以及端口
因端口被封禁,导致连接超时,这里改用 SSL 协议下的端口即可,使用 SSL 协议需要先请求证书支持。
- 构建证书
# 创建存放证书目录
mkdir -p ~/.certs
# 向 163 请求证书
echo -n | openssl s_client -connect smtp.ym.163.com:994 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/163.crt
# 添加一个 SSL 证书到证书数据库中
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/163.crt
# 添加一个 Global 证书到证书数据库中
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/163.crt
# 列出目录下证书
certutil -L -d ~/.certs
- 重新配置发件人信息
$ vim /etc/mail.rc
set from=我的服务器<xxxx@163.com>
set smtp=smtps://smtp.ym.163.com:994
set smtp-auth-user=xxxx@163.com
set smtp-auth-password=xxxxxx
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/root/.certs
# 配置完毕应该即可避免端口 25 被封禁问题
还有一种情况就是证书不被信任,执行下面命令即可
$ certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i 163.crt
Notice: Trust flag u is set automatically if the private key is present.
文章评论
申请证书的时候 smtp.163.com:465 地址改成这个就可以了
按照楼主的方法 没有生产 一直报 smtp 451 错误,将stmp地址修改为如下的地址:smtp.163.com:465,也可参考 这个 https://www.52pojie.cn/thread-1602544-1-1.html