今天在线上配置数据库服务,在本机测试的时候写了一个当检测到MySQL宕机的时候会发送一封邮件到指定的账户提醒,部署到阿里云之后其他一切正常,就是邮件发送不成功,折腾了我一天

原来是因为国家政策,为了防止疯狂发送垃圾邮件,阿里云关闭了25端口(安全组无法开启25端口),而我在本机测试的时候是直接使用Linux自带的发送邮件功能,指令如下:

echo "`date` mysql is stop" | mail -s "mysql is stop"    xxxx@qq.com

上述指令将向xxxx@qq.com邮箱发送一封标题为“mysql is stop”,内容为“系统时间+ mysql is stop”的邮件,发件人没有设置,也能发送成功,但在许多邮箱中将被识别为垃圾邮件,需要在垃圾邮件箱中查询

但这在阿里云服务器上是不成功的,指令虽然不会报错,但是阿里云不会发送邮件,因为25端口是被关的。

于是寻思着那就用外部邮箱服务器发送邮件呗,上网搜了一通,全都失败,最接近成功的是下面这个教程:

https://blog.csdn.net/zh314js/article/details/76038868

然后就蒙蔽了,折腾了好久都没找到原因,后来经过高人指点,说要获得ssl证书通过465端口阿里云服务器才能通过外部邮箱服务器发送邮件,过程如下:

1.关闭其他的邮件工具

service sendmail stop

chkconfig sendmail off

service postfix stop

chkconfig postfix off

2.安装mailx(我在之前已经安装过了,所以这步我没做)

yum install mailx

3.在邮箱中开启smtp,开启后会得到一个授权码,这个授权码就代替了密码(具体操作参考上面提到的最接近成功的教程)

4.请求数字证书(这里用qq邮箱,所以向qq请求证书)

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 -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ~/.certs/./ -i qq.crt

certutil -L -d /root/.certs

注意:执行上述语句的时候会报错,说qq.crt没有可执行权限,具体在哪一步忘记了,遇到了赋予权限就好,我是直接给了可读可写可执行的权限,指令:     chmod 777 qq.crt   需要先cd到/root/.certs/ 目录

5.配置/etc/mail.rc

set from=xxxx@qq.com #设置发送邮件方

set smtp=smtps://smtp.qq.com:465 #邮件服务器

set smtp-auth-user=xxxx@qq.com #用户名

set smtp-auth-password=xxxxxxxxxxx #授权码

set smtp-auth=login #默认login

set ssl-verify=ignore #ssl认证方式

set nss-config-dir=/root/.certs #证书所在目录

6.测试发送邮件指令

echo "`date` mysql is stop" | mail -s "mysql is stop"    xxxx@qq.com

 

成功接受到邮件
---------------------
作者:CC-梅
来源:CSDN
原文:https://blog.csdn.net/m0_37673753/article/details/81356298
版权声明:本文为博主原创文章,转载请附上博文链接!

发表评论

邮箱地址不会被公开。 必填项已用*标注