This is an attempt by me to filter mails on a Linux machine. You can run this file on your home directory at mail server and it will help you to sort mails on the basis of
- From which user the mail has come or from which domain it came,
- to which user or domain mail was sent and
- the keywords in the subject part of the mail.
Actually its very slow as shell is very slow , I cant help it . It scan your entire mbox file in the home directory by default. Copy the code and paste in a file say filter.sh and change its permissions to executable. Place it in you home directory at the mail server and run.
Example
You want to see all mails from username@gmail.com just run and it will ask for input,
press 1
From: username [Enter]
It will display all the mails from that are lying there in your mbox one by one.
Get the script here or copy the code below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | #!/bin/bash ################################# # Author - Kulbir Saini # # Home - http://sain.ico.in/ # ################################# #shell script to filter mails. echo -e -n "\033[32mWelcome to the mail filter system \nWhat do you want to do? \nCheck mails on basis of \n1) Sender... \n2) Receiver... \n3) Subject... \n4) Quit... \nPress(1,2,3,4): \033[0m" read int <&2 while [[ 1 ]];do while [[ 1 ]];do count=0; line="" if [[ $int == 1 ]];then echo -n -e "\033[32mFrom:\033[0m " read from <&2 i=0 clear while read line ;do loopbreak=0; nextmessagestatus=1; mailtostatus=1; mailsubstatus=1; stat=1; toecho=`echo $line | grep -E "^From:+" | grep -E "${from}"` if [ "$toecho" != "" ];then i=`expr $i + 1` echo -e "${toecho}" while read line ; do mailto=`echo $line | grep -E "^To:+"` mailsub=`echo $line | grep -E "^Subject:+"` if [[ "$mailto" != "" ]] && [[ $mailtostatus == 1 ]];then echo $mailto mailtostatus=0 fi if [[ "$mailsub" != "" ]] && [[ $mailsubstatus == 1 ]];then echo $mailsub mailsubstatus=0 fi if [[ $mailtostatus == 0 ]] && [[ $mailsubstatus == 0 ]] && [[ $stat == 1 ]];then echo -e "\033[33mStarting of the Message${i}:\033[0m" stat=0 fi fromstatus=`echo $line | grep -E "^X-UID:+"` if [[ $fromstatus != "" ]];then while read line; do loopstatus=`echo $line | grep -E "^From +"` if [[ $loopstatus != "" ]];then loopbreak=1 break fi echo $line done if [[ $loopbreak == 1 ]];then echo -e -n "\033[33mEnd of the Message${i}.\nDisplay next message(y/n):\033[0m" read messagestatus <&2 if [[ "$messagestatus" == "y" ]];then clear else nextmessagestatus=0 fi break fi fi done count=`expr $count + 1` fi if [[ $nextmessagestatus == 0 ]];then break fi done if [[ $count == 0 ]];then echo -e "\033[32mNo mail(s) From: ${from}.\n\033[0m" else echo -e "\033[32mTotal $count mail(s) From: ${from}.\n\033[0m" fi elif [[ $int == 2 ]];then echo -n -e "\033[32mTo: \033[0m" read to <&2 i=0 clear while read line ;do loopbreak=0; nextmessagestatus=1 toecho=`echo $line | grep -E "^To:+" | grep -E "${to}"` if [[ "$toecho" != "" ]];then echo -e "$toecho" i=`expr $i + 1` while read line; do tostatus=`echo $line | grep -E "^X-UID:+"` if [[ $tostatus != "" ]];then echo -e "\033[33mStarting of the Message${i}:\033[0m" while read line; do loopstatus=`echo $line | grep -E "^From +"` if [[ $loopstatus != "" ]];then loopbreak=1 break fi echo $line done if [[ $loopbreak == 1 ]];then echo -e -n "\033[33mEnd of the Message${i}. \nDisplay next message(y/n): \033[0m" read messagestatus <&2 if [[ $messagestatus == "y" ]];then clear else nextmessagestatus=0 fi break fi fi done count=`expr $count + 1` fi if [[ $nextmessagestatus == 0 ]];then break fi done if [[ $count == 0 ]];then echo -e "\033[32mNo mail(s) to: ${to}.\n\033[0m" else echo -e "\033[32mTotal $count mail(s) To: ${to}.\n\033[0m" fi elif [[ $int == 3 ]];then echo -n -e "\033[32mSubject:\033[0m " read subject <&2 clear i=0 while read line ;do loopbreak=0; nextmessagestatus=1 toecho=`echo $line | grep -E "^Subject:+" | grep -E "${subject}"` if [[ "$toecho" != "" ]];then echo "$toecho" i=`expr $i + 1` while read line; do substatus=`echo $line | grep -E "^X-UID:+"` if [[ $substatus != "" ]];then echo -e "\033[33mStarting of the Message${i}:\033[0m" while read line ; do loopstatus=`echo $line | grep -E "^From +"` if [[ $loopstatus != "" ]];then loopbreak=1 break fi echo $line done if [[ $loopbreak == 1 ]];then echo -e -n "\033[33mEnd of the message${i}. \nDisplay next message(y/n): \033[0m" read messagestatus <&2 if [[ $messagestatus == "y" ]];then clear else nextmessagestatus=0 fi break fi fi done count=`expr $count + 1` fi if [[ $nextmessagestatus == 0 ]];then break fi done if [[ $count == 0 ]];then echo -e "\033[32mNo mail(s) with Subject: ${subject}.\n\033[0m" else echo -e "\033[32mTotal $count mail(s) with Subject: ${subject}.\033[0m\n" fi elif [[ $int == 4 ]];then echo -e "\033[32mThank you for using this utility. \nPlease visit again.\033[0m" exit else echo -e "\033[32mI could not understand that. \nPlease try again.\033[0m\n" fi echo -e -n "\033[32m1) Sender... \n2) Receiver... \n3) Subject... \n4) Quit... \nPress(1,2,3,4):\033[0m " read int <&2 break done < mbox done |