之前用過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郵件發送的概述了,以後如果遇到其他情況,再進行補充