之前用过shell脚本发送报表,不过都是单个脚本发送一个报表,最近使用到根据条件循环发送报表的情况,也从同事那里学到这个技能。这里对shell发送邮件做一些总结。
目录
1.单个脚本实现单封邮件的发送
这种就很简单了,直接发送邮件,下面来一个案例。
下面python命令是在python环境下运行python代码(用来结果转为excel文件,最终作为附件发送)
mutt命令下面再一一讲解。
#!/bin/bash
title='***监控'
body='监控内容描述'
reportPath=`pwd -P`
echo "reportPath:"$reportPath
hdfs dfs -get txt2xls.py $reportPath/txt2xls.py
#sql语句 附件1
hive -e "
select * from table
;" > $reportPath/result.txt
#sql语句 附件2
hive -e "
select * from dw_htlbizappdb.oversea_result_jiankong
where d >= date_sub('${Today}',10) and d <= '${Today}'
;" > $reportPath/oversea_result.txt
#附件1 发送
python2.7 $reportPath/txt2xls.py $reportPath/result.txt $reportPath/result.xls
#附件2 发送
python2.7 $reportPath/txt2xls.py $reportPath/oversea_result.txt $reportPath/oversea_result.xls
#aaa@qq.com 这是自己配置发送邮件的公共邮件地址 邮件地址中间空格隔开
echo -e $body | cat | mutt -s $title -e "my_hdr from:<aaa@qq.com>" chen@163.com qq@163.com -a $reportPath/result.xls $reportPath/oversea_result.xls
2.根据条件循环发送--不同条件发送给不同的人
这里就多了arr1和arr2,二者之间的关系,见代码中的备注,其中,分为了有抄送人版本和无抄送人版本,如果需要邮件统一抄送,就保留cc的部分,否则不需要。
#!/bin/sh
body='监控'
EmailPath="/a/b/c"
reportPath=`pwd -P`
echo "reportPath:"$reportPath
hdfs dfs -get txt2xls.py $reportPath/txt2xls.py
#finalhotelgroup
arr1=("('aa','bb')" "('cc','dd')")
#mail 数组用来循环符合arr1中第一个“”的条件发送arr2中第一个“”中的邮件,依次对应
arr2=("aaa@qq.com" "bbb@qq.com")
#每个邮件都抄送下面cc的邮箱
cc="ccc@qq.com;ddd@qq.com"
#sql
esql="select col1,col2,col3
from table
"
lsql=""
lmail=""
for ((i=0;i<${#arr1[@]};i++))
do
lsql=$esql" and col3 in "${arr1[$i]} #col3用来判定循环
echo $lsql
lmail=${arr2[$i]}
echo $lmial
hive -e "$lsql"> $reportPath/report.txt
python2.7 $reportPath/txt2xls.py $reportPath/report.txt $reportPath/report.xls
#无邮件抄送人版本
echo -e $body | cat | mutt -s "监控报表" -e "my_hdr from:<aaa@qq.com>" $lmail -a $reportPath/report.xls
#有邮件抄送人版本
echo -e $body | cat | mutt -s "监控报表" -e "my_hdr from:<aaa@qq.com>" $lmail -c $cc -a $reportPath/report.xls
done
3.mutt参数
邮件发送格式:
mutt [-hnpRvxz][-a<文件>][-b<地址>][-c<地址>][-f<邮件文件>][-F<配置文件>][-H<邮件草稿>][-i<文件>][-m<类型>] [-s<主题>][邮件地址]
参数含义:
参 数:
-a <文件> 在邮件中加上附加文件。
-b <地址> 指定密件副本的收信人地址。
-c <地址> 指定副本的收信人地址。
-f <邮件文件> 指定要载入的邮件文件。
-F <配置文件> 指定mutt程序的设置文件,而不读取预设的.muttrc文件。
-h 显示帮助。
-H <邮件草稿> 将指定的邮件草稿送出。
-i <文件> 将指定文件插入邮件内文中。
-m <类型> 指定预设的邮件信箱类型。
-n 不要去读取程序培植文件(/etc/Muttrc)。
-p 在mutt中编辑完邮件后,而不想将邮件立即送出,可将该邮件暂缓寄出。
-R 以只读的方式开启邮件文件。
-s <主题> 指定邮件的主题。
-v 显示mutt的版本信息以及当初编译此文件时所给予的参数。
-x 模拟mailx的编辑方式。
-z 与-f参数一并使用时,若邮件文件中没有邮件即不启动mutt。
以上就是对shell邮件发送的概述了,以后如果遇到其他情况,再进行补充