mailx配置TSL发送邮件

前提摘要:
服务器上做了一个定时任务需要将结果发送到邮箱,使用自带的mail非常的不友好,经常会被当作垃圾邮件被干掉,
于是想到了mailx作为客户端,使用SMTP发送邮件;测试了半天才发现狗蛋的阿里为了防止滥发邮件,把出口的25端
口给封了,封了!然后现在摆在面前的只有2条路,1、申请阿里云解封;2、使用TSL加密协议,也就是465端口;
出于服务器安全考虑,第一种先放一放,研究下第二种方法;于是乎一通谷歌百度,发现这方面的资料少之又少;
研究了2天之后,搞定了,于是决定记录下来,以给需要的人用,自己也做一个笔记。

进入正题:

一、配置mailx使用SMTP发送邮件:
1、安装mailx;这里直接使用yum install mailx -y 进行安装即可;
2、在/etc/mail.rc配置文件中,在最后面输入以下内容:

set from="xxx@126.com"
set smtp=smtp.126.com
set smtp-auth-user=xxx
set smtp-auth-password=邮箱密码
set smtp-auth=login

配置都很简单,这里就不多说了,有两点需要注意的:
1、邮箱需要开启SMTP功能,每个邮箱的开启方法都大同小异;
2、现在大部分邮箱使用SMTP会让你启动一个授权码来代替邮箱密码
具体各个邮箱开启授权码的方式可以直接百度;
测试是否发送成功:
mailx -s "邮箱测试" xxxx@qq.com < message_file 测试邮件一旦成功,收件箱会马上收到邮件,如果没有收到,则等一会可以看到shell界面的错误提示; 上面配置的是简单的使用25端口的SMTP发送邮件的功能,一般情况下我们使用这个就足够了,这个办法 在网上也很多配置说明,这里就不再浪费时间了,下面我们讲重点,使用TSL发送邮件; 前面说了,阿里云把25端口封了,去申请解封也比较麻烦,于是就想到了用TSL方式,绕过25端口发送邮件; TSL也就是使用SSL加密的方式,使用465或者其他端口来发送邮件,现在大部分邮箱都支持SSL,具体SSL的端口 地址,也可以查百度,这里是以126邮箱为准,126邮箱使用的是465或者994端口; 下面是详细的配置过程: 1、软件要求:openssl、mailx 12.0以上; 2、既然使用的是SSL协议,那当然是要有证书的了,下面是获取证书的操作;

mkdir -p /root/.certs/
echo -n | openssl s_client -connect smtp.126.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 -L -d /root/.certs

按照上面操作,只要不报错,就是正常的,我们会在/root/.certs下面看到几个证书文件,说明操作成功了;至于为什么
要这么做,不要问我,我也是COPY大神的办法;有兴趣的可以参考最后大神的文章链接;

3、证书配置好了,下面我们就要来配置mail.rc配置文件了,和最开始的不同,这里我们就需要配置和TSL相关的东西了

set from=xxxooo@126.com
set smtp=smtps://smtp.126.com:465
set smtp-auth-user=xxxooo@126.com
set smtp-auth-password=你的授权码
set smtp-auth=login
#set smtp-use-starttls 这里是不需要配置的,很多地方没说明,配置了反而会验证失败,所以我注释掉;
set ssl-verify=ignore
set nss-config-dir=/root/.certs

其实就多了几个配置stmp前面加了stmps://指定协议类型,后面加上端口号;
启动ssl协议 ,下面指定ssl证书所在目录,就这样。
配置OK了之后,测试发送邮件;
测试能收到邮件就OK,说明发送没问题,至于具体会出现什么报错,可以根据报错的内容进行谷歌;
我这里在发送邮件的时候会提示一个证书不信任的问题,因为不影响正常发送邮件,所以选择忽略;

关于其他类型的邮箱这里没有做测试,QQ邮箱据说比这个好简单。其他的深入研究这里因为时间关系,没有太多的
技术含量,只是在查找资料的过程中,发现没有一个完整的案例,特意将自己的操作过程写下来;

参考文章:http://irow10.blog.51cto.com/2425361/1812638/
https://sourceforge.net/p/nail/mailman/message/30263940/

PS 感谢小菜哥的来稿。

原创文章,转载请注明: 转载自笛声

本文链接地址: mailx配置TSL发送邮件

8 条评论

  • leiyuhang 2017年7月20日 回复

    我也是搜了一大堆资料没成功,照着你的文章终于成功了,感谢大佬分享!

    • dige 2017年7月21日 回复 作者

      对你有帮助就好,这篇文章是好友的投稿,不是我自己写的。

  • YSL 2017年10月30日 回复

    大神,膜拜,真牛逼,我什么都做好了,就差一步:smtp=smtps://smtp.126.com:465 点睛之笔啊,佩服佩服

  • 明月登楼 2017年12月20日 回复

    哈哈,不错,很有帮助的干货文章,我正缺这个呢!服务器上无法发送邮件是个很蛋疼的事儿!

  • 明月登楼 2017年12月20日 回复

    哈哈,我搞定了,证书不信任的问题也搞定了!
    进入证书存放目录里分别执行如下命令:
    pwd
    ll
    certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt
    最后显示:
    Notice: Trust flag u is set automatically if the private key is present.
    即可!

  • dige 2017年12月21日 回复

    阿里云和腾讯云都可以在控制台直接申请解封25端口,阿里链接 https://yundun.console.aliyun.com/?p=sc#/sc/port

  • […] 还好在【笛声】博客里发现了【mailx配置TSL发送邮件】这篇文章就是让 Linux 系统的 mailx 结合 QQ 邮箱发送邮件的,照着此文的指导,终于可以收到邮件了,哈哈! […]

  • 西枫里博客 2018年2月7日 回复

    原来授权码是用来代替邮箱密码的~

发表评论

电子邮件地址不会被公开。 必填项已用*标注