需求:元旦来临,公司要为一批用户发送元旦活动的邮件,用户数量成千上万。种种原因,需要人工发送这些邮件,而且邮件服务器限制每封邮件的收件人最多有50个,邮箱与邮箱之间用分号隔开。(111@qq.com;222@qq.com;333@qq.com;444@qq.com)


    那么问题来了,有没有什么办法批量处理一下邮件列表呢,50个一组,组内邮箱之间用分号隔开。


    下面我们在Linux上编写一个shell脚本来处理这成千上万个邮箱。


[root@localhost ~]# cat mail.list 
1@qq.com
2@qq.com
3@qq.com
4@qq.com
5@qq.com
6@qq.com
7@qq.com
8@qq.com
9@qq.com
10@qq.com
11@qq.com
12@qq.com
[root@localhost ~]# cat mail.sh 
#!/bin/bash
#####################################################################
#
#处理file中的邮件列表,每次发送给n个邮件地址
#
#使用方法sh mail.sh file n
#
#####################################################################
#存储邮件列表的文件
mailaddr_list_file=$1
#一共有多少个邮箱用户
mail_addr_list=`cat $mailaddr_list_file |wc -l`
#每封信发送给多少用户
once_mailaddr_num=$2
#一共需要发送多少封邮件
if [ $(expr $mail_addr_list % $once_mailaddr_num ) -eq 0 ]
then
mail_send_num=$(expr $mail_addr_list / $once_mailaddr_num )
else
mail_send_num=$(expr $mail_addr_list / $once_mailaddr_num \+ 1 )
fi
#输出汇总信息
echo
echo -e "\t 一共有多少个邮箱用户:  \t $mail_addr_list    \n"
echo -e "\t 每封信发送给多少个用户:\t $once_mailaddr_num \n"
echo -e "\t 一共需要发送多少封邮件:\t $mail_send_num     \n"
#输出处理结果
for     (( i=0;i<$mail_send_num;i++ ))
do
        sed -n "$(expr $i \* $once_mailaddr_num \+ 1),$(expr $i \* $once_mailaddr_num \+ $once_mailaddr_num)p" $mailaddr_list_file |tr "\n" ";" |sed 's/;$/\n/'
        echo 
done
[root@localhost ~]# sh mail.sh mail.list 1
 一共有多少个邮箱用户:   12    
 每封信发送给多少个用户: 1 
 一共需要发送多少封邮件: 12     
1@qq.com
2@qq.com
3@qq.com
4@qq.com
5@qq.com
6@qq.com
7@qq.com
8@qq.com
9@qq.com
10@qq.com
11@qq.com
12@qq.com
[root@localhost ~]# sh mail.sh mail.list 2
 一共有多少个邮箱用户:   12    
 每封信发送给多少个用户: 2 
 一共需要发送多少封邮件: 6     
1@qq.com;2@qq.com
3@qq.com;4@qq.com
5@qq.com;6@qq.com
7@qq.com;8@qq.com
9@qq.com;10@qq.com
11@qq.com;12@qq.com
[root@localhost ~]# sh mail.sh mail.list 3
 一共有多少个邮箱用户:   12    
 每封信发送给多少个用户: 3 
 一共需要发送多少封邮件: 4     
1@qq.com;2@qq.com;3@qq.com
4@qq.com;5@qq.com;6@qq.com
7@qq.com;8@qq.com;9@qq.com
10@qq.com;11@qq.com;12@qq.com
[root@localhost ~]# sh mail.sh mail.list 4
 一共有多少个邮箱用户:   12    
 每封信发送给多少个用户: 4 
 一共需要发送多少封邮件: 3     
1@qq.com;2@qq.com;3@qq.com;4@qq.com
5@qq.com;6@qq.com;7@qq.com;8@qq.com
9@qq.com;10@qq.com;11@qq.com;12@qq.com
[root@localhost ~]# sh mail.sh mail.list 5
 一共有多少个邮箱用户:   12    
 每封信发送给多少个用户: 5 
 一共需要发送多少封邮件: 3     
1@qq.com;2@qq.com;3@qq.com;4@qq.com;5@qq.com
6@qq.com;7@qq.com;8@qq.com;9@qq.com;10@qq.com
11@qq.com;12@qq.com
[root@localhost ~]# sh mail.sh mail.list 6
 一共有多少个邮箱用户:   12    
 每封信发送给多少个用户: 6 
 一共需要发送多少封邮件: 2     
1@qq.com;2@qq.com;3@qq.com;4@qq.com;5@qq.com;6@qq.com
7@qq.com;8@qq.com;9@qq.com;10@qq.com;11@qq.com;12@qq.com
[root@localhost ~]# sh mail.sh mail.list 7
 一共有多少个邮箱用户:   12    
 每封信发送给多少个用户: 7 
 一共需要发送多少封邮件: 2     
1@qq.com;2@qq.com;3@qq.com;4@qq.com;5@qq.com;6@qq.com;7@qq.com
8@qq.com;9@qq.com;10@qq.com;11@qq.com;12@qq.com
[root@localhost ~]# sh mail.sh mail.list 8
 一共有多少个邮箱用户:   12    
 每封信发送给多少个用户: 8 
 一共需要发送多少封邮件: 2     
1@qq.com;2@qq.com;3@qq.com;4@qq.com;5@qq.com;6@qq.com;7@qq.com;8@qq.com
9@qq.com;10@qq.com;11@qq.com;12@qq.com
[root@localhost ~]# sh mail.sh mail.list 9
 一共有多少个邮箱用户:   12    
 每封信发送给多少个用户: 9 
 一共需要发送多少封邮件: 2     
1@qq.com;2@qq.com;3@qq.com;4@qq.com;5@qq.com;6@qq.com;7@qq.com;8@qq.com;9@qq.com
10@qq.com;11@qq.com;12@qq.com
[root@localhost ~]# sh mail.sh mail.list 10
 一共有多少个邮箱用户:   12    
 每封信发送给多少个用户: 10 
 一共需要发送多少封邮件: 2     
1@qq.com;2@qq.com;3@qq.com;4@qq.com;5@qq.com;6@qq.com;7@qq.com;8@qq.com;9@qq.com;10@qq.com
11@qq.com;12@qq.com
[root@localhost ~]# sh mail.sh mail.list 11
 一共有多少个邮箱用户:   12    
 每封信发送给多少个用户: 11 
 一共需要发送多少封邮件: 2     
1@qq.com;2@qq.com;3@qq.com;4@qq.com;5@qq.com;6@qq.com;7@qq.com;8@qq.com;9@qq.com;10@qq.com;11@qq.com
12@qq.com
[root@localhost ~]# sh mail.sh mail.list 12
 一共有多少个邮箱用户:   12    
 每封信发送给多少个用户: 12 
 一共需要发送多少封邮件: 1     
1@qq.com;2@qq.com;3@qq.com;4@qq.com;5@qq.com;6@qq.com;7@qq.com;8@qq.com;9@qq.com;10@qq.com;11@qq.com;12@qq.com
[root@localhost ~]# sh mail.sh mail.list 13
 一共有多少个邮箱用户:   12    
 每封信发送给多少个用户: 13 
 一共需要发送多少封邮件: 1     
1@qq.com;2@qq.com;3@qq.com;4@qq.com;5@qq.com;6@qq.com;7@qq.com;8@qq.com;9@qq.com;10@qq.com;11@qq.com;12@qq.com