YOLO813

配置centos直接发送邮件

    最近有个需求,需要在服务器上发送邮件通知,之前一直都是使用python来操作,这次想换一个方法,直接在服务器上发送邮件。咨询了服务器供应商,可以帮忙开通封禁的25号端口,但是有注意事项,想着有点麻烦,干脆就不使用25号端口,改用465号端口。

    关闭其它邮件工具

systemctl stop sendmail
systemctl stop postfix

    安装mailx

yum install mailx

    开启smtp,我是仿照示例使用的163邮箱

    请求163邮箱的数字证书。

mkdir .certs
echo -n | openssl s_client -connect smtp.163.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /root/.certs/163.crt

certutil -A -n "GeoTrust SSL CA" -t "C,," -d /root/.certs -i /root/.certs/163.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d /root/.certs -i /root/.certs/163.crt
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d /root/.certs/./ -i /root/.certs/163.crt

    注意,centos可能会碰到如下错误:

certutil: command not found

    查询哪些包可以提供certutil

yum provides */certutil

    安装即可

yum install nss-tools-3.67.0-6.el8_4.x86_64

    以上操作完成之后,目录文件如下:

ls /root/.certs/

certutil -L -d /root/.certs

    配置/etc/mail.rc,添加如下内容

set from=xxx@163.com #之前设置好的邮箱地址
set smtp="smtps://smtp.163.com:465" #邮件服务器
set smtp-auth-user=xxx@163.com #之前设置好的邮箱地址
set smtp-auth-password=xxxx #授权码
set smtp-auth=login #默认login即可
set ssl-verify=ignore #ssl认证方式
set nss-config-dir=/root/.certs #证书所在目录

    测试,可以收到邮件:

echo "content" | mail -s "Test_Subject" xxxxxxxx@qq.com

    但这里有个问题,中文主题或者内容会是乱码,建议写一个shell脚本来发送邮件,例如

vim mailCnTest.sh
# 解决中文乱码
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"

echo "中文" | mail -s "中文主题" xxxxxxxx@qq.com

    也可以创建一个txt文件,用于规范邮件内容,或者使用-a参数发送一个附件,例如:

cat /root/1.txt | mail -a demo2.py -s "中文主题" xxxxxxxx@qq.com


参考:

https://www.cnblogs.com/along21/p/9849645.html
https://www.codeleading.com/article/15411313177/
https://blog.51cto.com/monty/2628242
https://superuser.com/questions/1647771/how-to-install-certutil-on-centos