目的:连接第三方smtp服务器去发送邮件,比如qq、新浪、网易等邮箱,只需要直接配置mail.rc文件即可实现。
本实验使用网易126邮箱。
1.先去126邮箱开通smtp服务并获得授权密码记住,后面会用到。
2.查看smtp.126.com服务器开启了那些端口,以前默认是25,现在网易停用了。
[root@danny ]# nmap smtp.126.com Starting Nmap 6.40 ( http://nmap.org ) at 2020-06-17 16:05 CST Nmap scan report for smtp.126.com (123.126.96.4) Host is up (0.014s latency). Other addresses for smtp.126.com (not scanned): 123.126.96.5 220.181.15.113 220.181.15.112 220.181.15.111 123.126.96.3 220.181.15.114 rDNS record for 123.126.96.4: mail-m964.mail.126.com Not shown: 998 filtered ports PORT STATE SERVICE 465/tcp open smtps 587/tcp open submission
或者使用nc命令扫描对应端口查看开启状态
[root@danny ]# nc -zv smtp.126.com 465 Ncat: Version 7.50 ( https://nmap.org/ncat ) Ncat: Connected to 123.126.96.5:465. Ncat: 0 bytes sent, 0 bytes received in 0.04 seconds.
可以看到开启了465和587端口(本次实验使用465),而下图可看到465端口使用的是ssl协议,所以相对mail.rc配置就需要使用ssl协议。
3.配置mail.rc
vim /etc/mail.rc set from=xxx@126.com //发件方邮箱或昵称,经过测试必须得和下面的发件邮箱一致,否则发不了邮件 set smtp=smtps://smtp.126.com:465 //注意使用的ssl协议连接 set smtp-auth-user=xxx@126.com //发件邮箱 set smtp-auth-password=xxxxxx //此处使用的就是前面生成的授权码 set stmp-auth=login set ssl-verify=ignore set nss-config-dir=/root/.certs //此处证书需要手动生成,否则会报错或者连接失败
重启服务
systemctl restart postfix.service
4.发送邮件测试
#第一种 echo "test" | mail -s \'test linux\' xxx@qq.com #第二种 mailx -v -s " 主题 " xxx@qq.com < a.sh //-v可以动态显示邮件发送状态。可以把a.sh文件的内容作为邮件内容发送
关于上面证书创建
默认的证书是没有的,如果不创建相应证书,邮件发送会报错或者连接失败。
//创建证书目录 mkdir -p /root/.certs cd .certs/ //获取邮件服务器证书 echo -n "" | openssl s_client -connect smtp.126.com:465 | sed -ne \'/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p\' > 126.crt //将证书添加到受信任列表 certutil -A -n \'smtp_126\' -t "P,P,P" -d . -i ./126.crt //上述命令中-A表示添加,-n是nickname,可以随意取,例如126或qq;-t表示受信任的标签,可取值是t/c/p三种或者其组合;-d表示证书所在目录,-i指示证书文件的位置。 //# 指向证书文件目录 set nss-config-dir=/root/.certs
注:
网上许多教程的-t标签都是"C,,",实践中发现使用该标签仍会报错(gmail的证书是google自己签发的,用C标签没问题,许多博主估计没试就直接抄来)。通过查阅certutil的用法,使用P标签顺利解决问题。
配置完成后,再使用mail命令发送邮件,烦人的警告消失不见。
参考文章:http://www.51testing.com/html/53/n-3727153.html