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