Explorar el Código

Email rule based on subject text

Bob Mottram hace 9 años
padre
commit
4ade1a6f91

+ 1
- 1
locale/de/freedombone-addemail.json Ver fichero

@@ -1,3 +1,3 @@
1 1
 {
2
-    "${PROJECT_NAME}-addemail -u [username] -e [email address] -g [group name] --public [yes|no]": ""
2
+    "${PROJECT_NAME}-addemail -u [username] -e [email address] -s [subject text] -g [group name] --public [yes|no]": ""
3 3
 }

+ 5
- 1
locale/de/freedombone-controlpanel-user.json Ver fichero

@@ -25,6 +25,9 @@
25 25
     "No email address was given": "",
26 26
     "No folder name was given": "",
27 27
     "Email rule for $RULE_EMAIL was added": "",
28
+    "When email arrives with subject containing:": "",
29
+    "No subject text was given": "",
30
+    "Email rule for subject '$RULE_SUBJECT' was added": "",
28 31
     "Block or unblock emails from a given address": "",
29 32
     "Block it:": "",
30 33
     "Block an email": "",
@@ -35,7 +38,8 @@
35 38
     "Change Email Filtering Rules": "",
36 39
     "Choose an operation:": "",
37 40
     "Add yourself to a mailing list": "",
38
-    "Add an email rule": "",
41
+    "Add an email rule for an address": "",
42
+    "Add an email rule for a subject": "",
39 43
     "Block or unblock an email address": "",
40 44
     "Block or unblock email with subject text": "",
41 45
     "Back to main menu": "",

+ 1
- 1
locale/es/freedombone-addemail.json Ver fichero

@@ -1,3 +1,3 @@
1 1
 {
2
-    "${PROJECT_NAME}-addemail -u [username] -e [email address] -g [group name] --public [yes|no]": ""
2
+    "${PROJECT_NAME}-addemail -u [username] -e [email address] -s [subject text] -g [group name] --public [yes|no]": ""
3 3
 }

+ 5
- 1
locale/es/freedombone-controlpanel-user.json Ver fichero

@@ -25,6 +25,9 @@
25 25
     "No email address was given": "",
26 26
     "No folder name was given": "",
27 27
     "Email rule for $RULE_EMAIL was added": "",
28
+    "When email arrives with subject containing:": "",
29
+    "No subject text was given": "",
30
+    "Email rule for subject '$RULE_SUBJECT' was added": "",
28 31
     "Block or unblock emails from a given address": "",
29 32
     "Block it:": "",
30 33
     "Block an email": "",
@@ -35,7 +38,8 @@
35 38
     "Change Email Filtering Rules": "",
36 39
     "Choose an operation:": "",
37 40
     "Add yourself to a mailing list": "",
38
-    "Add an email rule": "",
41
+    "Add an email rule for an address": "",
42
+    "Add an email rule for a subject": "",
39 43
     "Block or unblock an email address": "",
40 44
     "Block or unblock email with subject text": "",
41 45
     "Back to main menu": "",

+ 1
- 1
locale/fr/freedombone-addemail.json Ver fichero

@@ -1,3 +1,3 @@
1 1
 {
2
-    "${PROJECT_NAME}-addemail -u [username] -e [email address] -g [group name] --public [yes|no]": ""
2
+    "${PROJECT_NAME}-addemail -u [username] -e [email address] -s [subject text] -g [group name] --public [yes|no]": ""
3 3
 }

+ 5
- 1
locale/fr/freedombone-controlpanel-user.json Ver fichero

@@ -25,6 +25,9 @@
25 25
     "No email address was given": "",
26 26
     "No folder name was given": "",
27 27
     "Email rule for $RULE_EMAIL was added": "",
28
+    "When email arrives with subject containing:": "",
29
+    "No subject text was given": "",
30
+    "Email rule for subject '$RULE_SUBJECT' was added": "",
28 31
     "Block or unblock emails from a given address": "",
29 32
     "Block it:": "",
30 33
     "Block an email": "",
@@ -35,7 +38,8 @@
35 38
     "Change Email Filtering Rules": "",
36 39
     "Choose an operation:": "",
37 40
     "Add yourself to a mailing list": "",
38
-    "Add an email rule": "",
41
+    "Add an email rule for an address": "",
42
+    "Add an email rule for a subject": "",
39 43
     "Block or unblock an email address": "",
40 44
     "Block or unblock email with subject text": "",
41 45
     "Back to main menu": "",

BIN
man/freedombone-addemail.1.gz Ver fichero


+ 30
- 9
src/freedombone-addemail Ver fichero

@@ -36,12 +36,13 @@ export TEXTDOMAINDIR="/usr/share/locale"
36 36
 
37 37
 MYUSERNAME=$USER
38 38
 EMAILADDRESS=
39
+SUBJECT_TEXT=
39 40
 GROUP_NAME=
40 41
 PUBLIC='no'
41 42
 
42 43
 function show_help {
43 44
     echo ''
44
-    echo $"${PROJECT_NAME}-addemail -u [username] -e [email address] -g [group name] --public [yes|no]"
45
+    echo $"${PROJECT_NAME}-addemail -u [username] -e [email address] -s [subject text] -g [group name] --public [yes|no]"
45 46
     echo ''
46 47
     exit 0
47 48
 }
@@ -62,6 +63,10 @@ case $key in
62 63
     shift
63 64
     EMAILADDRESS="$1"
64 65
     ;;
66
+    -s|--subject)
67
+    shift
68
+    SUBJECT_TEXT="$1"
69
+    ;;
65 70
     -g|--group)
66 71
     shift
67 72
     GROUP_NAME="$1"
@@ -77,14 +82,27 @@ esac
77 82
 shift
78 83
 done
79 84
 
80
-if ! [[ $MYUSERNAME && $EMAILADDRESS && $GROUP_NAME ]]; then
85
+if ! [[ $MYUSERNAME && $GROUP_NAME ]]; then
81 86
     show_help
82 87
 fi
83 88
 
89
+if [ ${#EMAILADDRESS} -lt 2 ]; then
90
+    if [ ${#SUBJECT_TEXT} -lt 2 ]; then
91
+        show_help
92
+    fi
93
+fi
94
+
84 95
 MUTTRC=/home/$MYUSERNAME/.muttrc
85 96
 PM=/home/$MYUSERNAME/.procmailrc
86 97
 LISTDIR=/home/$MYUSERNAME/Maildir/$GROUP_NAME
87 98
 
99
+proc_rule="  * ^From:.*$EMAILADDRESS"
100
+proc_comment="# Email rule for $EMAILADDRESS -> $GROUP_NAME"
101
+if [ ${#SUBJECT_TEXT} -gt 0 ]; then
102
+    proc_rule="  * ^From:.*$EMAILADDRESS"
103
+    proc_comment="# Email rule for '$SUBJECT_TEXT' -> $GROUP_NAME"
104
+fi
105
+
88 106
 if [ ! -d "$LISTDIR" ]; then
89 107
     mkdir -m 700 $LISTDIR
90 108
     mkdir -m 700 $LISTDIR/tmp
@@ -92,40 +110,43 @@ if [ ! -d "$LISTDIR" ]; then
92 110
     mkdir -m 700 $LISTDIR/cur
93 111
 fi
94 112
 chown -R $MYUSERNAME:$MYUSERNAME $LISTDIR
95
-if ! grep -q "Email rule for $EMAILADDRESS -> $GROUP_NAME" $PM; then
113
+if ! grep -q "$proc_comment" $PM; then
96 114
     if [[ $PUBLIC != "yes" ]]; then
97 115
         # private emails go after the encryption stage
98 116
         echo '' >> $PM
99
-        echo "# Email rule for $EMAILADDRESS -> $GROUP_NAME" >> $PM
117
+        echo "$proc_comment" >> $PM
100 118
         echo ":0" >> $PM
101
-        echo "  * ^From:.*$EMAILADDRESS" >> $PM
119
+        echo "$proc_rule" >> $PM
102 120
         echo "$LISTDIR/new" >> $PM
103 121
         echo "# End of rule" >> $PM
104 122
     else
105
-        # public emails are copied before hte encryption stage
123
+        # public emails are copied before the encryption stage
106 124
         if ! grep -q '# encrypt' $PM; then
107 125
             echo '' >> $PM
108
-            echo "# Email rule for $EMAILADDRESS -> $GROUP_NAME" >> $PM
126
+            echo "$proc_comment" >> $PM
109 127
             echo ":0" >> $PM
110
-            echo "  * ^From:.*$EMAILADDRESS" >> $PM
128
+            echo "$proc_rule" >> $PM
111 129
             echo "$LISTDIR/new" >> $PM
112 130
             echo "# End of rule" >> $PM
113 131
         else
114
-            filter=$(echo "# Email rule for $EMAILADDRESS -> $GROUP_NAME\n:0\n  * ^From:.*$EMAILADDRESS\n$LISTDIR/new\n# End of rule\n")
132
+            filter=$(echo "$proc_comment\n:0\n${proc_rule}\n$LISTDIR/new\n# End of rule\n")
115 133
             sed -i "/# encrypt/i ${filter}" $PM
116 134
         fi
117 135
     fi
118 136
     chown $MYUSERNAME:$MYUSERNAME $PM
119 137
 fi
138
+
120 139
 if [ ! -f "$MUTTRC" ]; then
121 140
   cp /etc/Muttrc $MUTTRC
122 141
   chown $MYUSERNAME:$MYUSERNAME $MUTTRC
123 142
 fi
143
+
124 144
 PROCMAILLOG=/home/$MYUSERNAME/log
125 145
 if [ ! -d $PROCMAILLOG ]; then
126 146
   mkdir $PROCMAILLOG
127 147
   chown -R $MYUSERNAME:$MYUSERNAME $PROCMAILLOG
128 148
 fi
149
+
129 150
 MUTT_MAILBOXES=$(grep "mailboxes =" $MUTTRC)
130 151
 if [[ $MUTT_MAILBOXES != *$GROUP_NAME* ]]; then
131 152
   if ! grep -q "=$GROUP_NAME" $MUTTRC; then

+ 56
- 10
src/freedombone-controlpanel-user Ver fichero

@@ -180,7 +180,7 @@ function add_to_mailing_list {
180 180
            --msgbox $"$LIST_NAME list was added" 6 40
181 181
 }
182 182
 
183
-function email_rule {
183
+function email_rule_address {
184 184
     data=$(tempfile 2>/dev/null)
185 185
     trap "rm -f $data" 0 1 2 5 15
186 186
     dialog --backtitle $"Freedombone User Control Panel" \
@@ -229,6 +229,50 @@ function email_rule {
229 229
            --msgbox $"Email rule for $RULE_EMAIL was added" 6 40
230 230
 }
231 231
 
232
+function email_rule_subject {
233
+    data=$(tempfile 2>/dev/null)
234
+    trap "rm -f $data" 0 1 2 5 15
235
+    dialog --backtitle $"Freedombone User Control Panel" \
236
+           --title $"Create an email rule" \
237
+           --form "\n" 9 65 4 \
238
+              $"When email arrives with subject containing:" 1 1 "" 1 35 24 28 \
239
+              $"Move to folder:" 2 1 "" 2 35 24 28 \
240
+              $"Public:" 3 1 $"no" 3 35 4 25 \
241
+              2> $data
242
+    sel=$?
243
+    case $sel in
244
+        1) return;;
245
+        255) return;;
246
+    esac
247
+    RULE_SUBJECT=$(cat $data | sed -n 1p)
248
+    RULE_FOLDER=$(cat $data | sed -n 2p)
249
+    RULE_PUBLIC=$(cat $data | sed -n 3p)
250
+
251
+    if [ ${#RULE_PUBLIC} -lt 1 ]; then
252
+        RULE_PUBLIC='no'
253
+    fi
254
+    if [[ $RULE_PUBLIC == $'y' || $RULE_PUBLIC == $'Y' || $RULE_PUBLIC == $'true' || $RULE_PUBLIC == $'True' || $RULE_PUBLIC == $'yes' || $RULE_PUBLIC == $'Yes' || $RULE_PUBLIC == $'YES' ]]; then
255
+        RULE_PUBLIC='yes'
256
+    else
257
+        RULE_PUBLIC='no'
258
+    fi
259
+    if [ ${#RULE_SUBJECT} -lt 2 ]; then
260
+        dialog --title $"Create an email rule" \
261
+               --msgbox $"No subject text was given" 6 40
262
+        return
263
+    fi
264
+    if [ ${#RULE_FOLDER} -lt 2 ]; then
265
+        dialog --title $"Create an email rule" \
266
+               --msgbox $"No folder name was given" 6 40
267
+        return
268
+    fi
269
+
270
+    ${PROJECT_NAME}-addemail -u $USER -s "$RULE_SUBJECT" \
271
+                         -g "$RULE_FOLDER" --public $RULE_PUBLIC
272
+    dialog --title $"Create an email rule" \
273
+           --msgbox $"Email rule for subject '$RULE_SUBJECT' was added" 6 40
274
+}
275
+
232 276
 function block_unblock_email {
233 277
     blockstr=$"Block or unblock emails from a given address"
234 278
     data=$(tempfile 2>/dev/null)
@@ -307,13 +351,14 @@ function menu_email {
307 351
         trap "rm -f $data" 0 1 2 5 15
308 352
         dialog --backtitle $"Freedombone User Control Panel" \
309 353
                --title $"Change Email Filtering Rules" \
310
-               --radiolist $"Choose an operation:" 13 70 6 \
354
+               --radiolist $"Choose an operation:" 14 70 7 \
311 355
                1 $"Add yourself to a mailing list" off \
312 356
                2 $"Remove yourself from a mailing list" off \
313
-               3 $"Add an email rule" off \
314
-               4 $"Block or unblock an email address" off \
315
-               5 $"Block or unblock email with subject text" off \
316
-               6 $"Back to main menu" on 2> $data
357
+               3 $"Add an email rule for an address" off \
358
+               4 $"Add an email rule for a subject" off \
359
+               5 $"Block or unblock an email address" off \
360
+               6 $"Block or unblock email with subject text" off \
361
+               7 $"Back to main menu" on 2> $data
317 362
         sel=$?
318 363
         case $sel in
319 364
             1) break;;
@@ -322,10 +367,11 @@ function menu_email {
322 367
         case $(cat $data) in
323 368
             1) add_to_mailing_list;;
324 369
             2) remove_user_from_mailing_list;;
325
-            3) email_rule;;
326
-            4) block_unblock_email;;
327
-            5) block_unblock_subject;;
328
-            6) break;;
370
+            3) email_rule_address;;
371
+            4) email_rule_subject;;
372
+            5) block_unblock_email;;
373
+            6) block_unblock_subject;;
374
+            7) break;;
329 375
         esac
330 376
     done
331 377
 }