Mailx在CentOS 7下默认安装,直接使用即可。
如果没有?

yum install mailx

为啥要使用第三方SMTP?因为自带的发送邮件,容易被当成垃圾邮件,不被邮件服务器接收。

非SSL协议使用25端口,SSL协议使用465端口,TLS协议使用587端口。我在配置的时候,不使用SSL协议几乎无法成功,原因也没有搞清楚,也没有必要纠结,为了安全还是用SSL比较好。

1、配置SMTP服务器

只需要修改一个配置文件:/etc/mail.rc,在文件最后添加如下内容。

set smtp-use-starttls # 启用SSL加密
set ssl-verify=ignore # SSL验证方式
set nss-config-dir=/root/.certs # SSL加密证书存放的位置

set from=**********@gmail.com # 发件人
set smtp=smtp.qq.com # SMTP服务器地址,默认使用加密端口,使用其他需要添加端口号
set smtp-auth-user=********* # SMTP帐号
set smtp-auth-password=********* # SMTP密码
set smtp-auth=login # 需要登录认证

2、检查sendmail服务

为什么不直接发送邮件进行测试呢?因为我觉得首先得确保所有先决条件都正常再进行发件测试,就我的经验而言,直接发件肯定会爆出很多问题,与其遇到一个挫败一次,不如提前解决好所有隐患。

systemctl status sendmail

可能出现的错误:

My unqualified host name (db-server) unknown; sleeping for retry

这是无法解析主机名的错误,一般问题出现在修改了Hostname之后,没有同时修改/etc/hosts内的主机名。添加正确的主机名即可解决。

127.0.0.1   localhost localhost.localdomain db-server

修改完毕后重新启动sendmail服务,并检查状态,确保没有异常后进行下一步。

systemctl restart sendmail
systemctl status sendmail

3、生成SSL证书

因为我们使用了SSL进行连接,所以自然需要证书来保证连接安全。还记得刚开始配置文件中的set nss-config-dir=/root/.certs吗?那就是证书存放的位置,我们在这个位置生成SSL证书。

mkdir -p /root/.certs
# 从服务器端获取证书保存到本地
echo -n | openssl s_client -connect smtp.gmail.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /root/.certs/gmail.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d /root/.certs -i /root/.certs/gmail.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d /root/.certs -i /root/.certs/gmail.crt
certutil -L -d /root/.certs

4、进行发件测试

最简单的方式,使用管道发送邮件:

echo "邮件正文" |mail -s "邮件标题" test@gmail.com

可能出现邮件正常发送,但是有报错:

Error in certificate: Peer's certificate issuer is not recognized.

解决方法,信任证书:

# 信任证书
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d /root/.certs -i /root/.certs/gmail.crt

到此结束。

5、其他发送邮件的方法

从文本文件读取邮件内容发送:

mail -s "邮件标题" test@gmail.com < mail.txt
最后修改:2021 年 04 月 18 日 08 : 01 PM