使用阿里云服务器发送邮件
今天在线上配置数据库服务,在本机测试的时候写了一个当检测到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
版权声明:本文为博主原创文章,转载请附上博文链接!