//
Linux中的邮件功能mailx
//
这两天有个临时的任务,某个游戏的开发人员需要定时提取一个表里面的数据,用来做一些统计分析的处理。由于线上的权限控制的比较严格,所以需要DBA在每天早上的10:00准时发送前一天的数据。这个需求如果人工的去执行,那么每天都要记得这个事情,如果某一天忘记了,那就不好了。
最后想了一个方法,就是通过设置crontab定时执行数据导出脚本的方法来实现,但是执行完脚本还需要人工干预将数据从服务器拖拽到本地,然后通过邮件进行发送,这个流程未免有点麻烦。
仔细想想,似乎在上面的基础上,再多加一步邮件发送的功能就好了,如果能从服务器上直接通过邮件的方式发送出去,这样就能解决我们的痛点了。查了查linux的命令,真有这么一个mailx(或者mail命令,这俩用法差不多)的命令,之前没有用过,今天学习了一下:
01
mailx简介
mailx 命令是Linux中专门用来发送和接收邮件的命令,我们可以使用man mailx的命令来查看mailx的使用手册,如果你的机器里面没有mailx这个命令,请使用yum -y install mailx的方法来安装这个依赖。
02
命令介绍
mailx的命令用法这里介绍一下,它包含很多参数,这里我挑选几个最常用的、重要的介绍一下:
-a 这个参数是添加附件用的,也是我们本案例的解决方案
-b 邮件的秘密抄送列表,后面跟邮箱地址,邮箱地址需要使用逗号分隔
-c 邮件的抄送列表
-s 邮件的主题,也就是这封邮件的标题
-f 要发送的文件内容,后面接文件名称,当然,一般情况下,不这么使用该参数,都是利用<文件名的方法来读取文件中的内容
举几个例子说明一下:
1、发送邮件信息
方法一:
echo "Hello" | mail -s "这里是主题" yeyz@126.com
方法二:
mail -s "这里是主题" yeyz@126.com < article.txt
这里可以看到,有两个方法,其中一个使用echo+管道的方法输入文章内容,另一个是使用读入文件的方法来加载文章内容
2、增加附件
mail -s "这里是主题" -a 附件名称 yeyz@126.com < article.txt
上面这个命令,就有了邮件主题、附件、以及收件地址和邮件内容。
这里需要特别注意,-a参数要放在邮件地址的前面!!!网上好多教程都将-a参数放在邮件地址的后面,导致发送邮件的时候报错。当时我也是参考别人的博客,设置了半天,发现写错了,这样的博客在百度上一搜一大把,大家还是要有自己的判断力,不然就可能被带跑偏了。
当我们不知道一个命令的用法的时候,最好的方法还是使用man+命令的方法或者命令+--help的方法去获得该命令的详细介绍
03
重要配置
要使用上面的功能完全实现一封邮件的发送,少不了smtp协议内容的配置,mailx命令的系统级配置文件是/etc/mail.rc,用户级别的默认配置文件是~/.mailrc,也可以通过MAILRC环境变量设置配置文件路径。作为普通用户,我们在本地的~/.mailrc文件进行配置,以下几项配置比较关键:
set from=monit@xxxxx.cn smtp=xxxxx.cn
set smtp-auth-user=monit@xxxxxcn smtp-auth-password=xxxxx
set smtp-auth=login
其中,
from是邮件的发送地址(注意和命令中的接收地址区分);
smtp是smtp服务器地址;
smtp-auth-user是smtp服务的认证用户;
smtp-auth-password是smtp服务的认证密码;
smtp-auth是smtp的认证方式
如果你们公司有自己的smtp服务器,那就用自己的服务器,如果没有,可以使用公网上的服务器,这里有个网址给出了一些例子:
https://blog.csdn.net/Gents_hu/article/details/92219811
举个例子:
set smtp=smtp.qq.com //邮箱所在服务器和端口地址
set from="xxxxxxxxx@qq.com" //你的qq邮箱
set smtp-auth-user="xxxxxxxx@qq.com" smtp-auth-password="*****" //邮箱密码
set smtp-auth=login //默认login即可
这样也是可以的,大家不妨自己试试