【shell】shell脚本Linux环境mutt发送邮件(实现单邮件循环发送和根据条件循环发送)

      之前用过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

#[email protected]  这是自己配置发送邮件的公共邮件地址  邮件地址中间空格隔开
echo -e $body | cat | mutt -s $title -e "my_hdr from:<[email protected]>" [email protected] [email protected] -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=("[email protected]" "[email protected]")

#每个邮件都抄送下面cc的邮箱
cc="[email protected];[email protected]"


#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:<[email protected]>" $lmail -a $reportPath/report.xls
    #有邮件抄送人版本
    echo -e $body | cat | mutt -s "监控报表" -e "my_hdr from:<[email protected]>" $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邮件发送的概述了,以后如果遇到其他情况,再进行补充

发布了91 篇原创文章 · 获赞 125 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/Jarry_cm/article/details/104562292