需求:元旦来临,公司要为一批用户发送元旦活动的邮件,用户数量成千上万。种种原因,需要人工发送这些邮件,而且邮件服务器限制每封邮件的收件人最多有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