Ver código fonte

Email rule based on subject text

Bob Mottram 9 anos atrás
pai
commit
4ade1a6f91

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

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 arquivo

25
     "No email address was given": "",
25
     "No email address was given": "",
26
     "No folder name was given": "",
26
     "No folder name was given": "",
27
     "Email rule for $RULE_EMAIL was added": "",
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
     "Block or unblock emails from a given address": "",
31
     "Block or unblock emails from a given address": "",
29
     "Block it:": "",
32
     "Block it:": "",
30
     "Block an email": "",
33
     "Block an email": "",
35
     "Change Email Filtering Rules": "",
38
     "Change Email Filtering Rules": "",
36
     "Choose an operation:": "",
39
     "Choose an operation:": "",
37
     "Add yourself to a mailing list": "",
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
     "Block or unblock an email address": "",
43
     "Block or unblock an email address": "",
40
     "Block or unblock email with subject text": "",
44
     "Block or unblock email with subject text": "",
41
     "Back to main menu": "",
45
     "Back to main menu": "",

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

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 arquivo

25
     "No email address was given": "",
25
     "No email address was given": "",
26
     "No folder name was given": "",
26
     "No folder name was given": "",
27
     "Email rule for $RULE_EMAIL was added": "",
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
     "Block or unblock emails from a given address": "",
31
     "Block or unblock emails from a given address": "",
29
     "Block it:": "",
32
     "Block it:": "",
30
     "Block an email": "",
33
     "Block an email": "",
35
     "Change Email Filtering Rules": "",
38
     "Change Email Filtering Rules": "",
36
     "Choose an operation:": "",
39
     "Choose an operation:": "",
37
     "Add yourself to a mailing list": "",
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
     "Block or unblock an email address": "",
43
     "Block or unblock an email address": "",
40
     "Block or unblock email with subject text": "",
44
     "Block or unblock email with subject text": "",
41
     "Back to main menu": "",
45
     "Back to main menu": "",

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

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 arquivo

25
     "No email address was given": "",
25
     "No email address was given": "",
26
     "No folder name was given": "",
26
     "No folder name was given": "",
27
     "Email rule for $RULE_EMAIL was added": "",
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
     "Block or unblock emails from a given address": "",
31
     "Block or unblock emails from a given address": "",
29
     "Block it:": "",
32
     "Block it:": "",
30
     "Block an email": "",
33
     "Block an email": "",
35
     "Change Email Filtering Rules": "",
38
     "Change Email Filtering Rules": "",
36
     "Choose an operation:": "",
39
     "Choose an operation:": "",
37
     "Add yourself to a mailing list": "",
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
     "Block or unblock an email address": "",
43
     "Block or unblock an email address": "",
40
     "Block or unblock email with subject text": "",
44
     "Block or unblock email with subject text": "",
41
     "Back to main menu": "",
45
     "Back to main menu": "",

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


+ 30
- 9
src/freedombone-addemail Ver arquivo

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

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

180
            --msgbox $"$LIST_NAME list was added" 6 40
180
            --msgbox $"$LIST_NAME list was added" 6 40
181
 }
181
 }
182
 
182
 
183
-function email_rule {
183
+function email_rule_address {
184
     data=$(tempfile 2>/dev/null)
184
     data=$(tempfile 2>/dev/null)
185
     trap "rm -f $data" 0 1 2 5 15
185
     trap "rm -f $data" 0 1 2 5 15
186
     dialog --backtitle $"Freedombone User Control Panel" \
186
     dialog --backtitle $"Freedombone User Control Panel" \
229
            --msgbox $"Email rule for $RULE_EMAIL was added" 6 40
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
 function block_unblock_email {
276
 function block_unblock_email {
233
     blockstr=$"Block or unblock emails from a given address"
277
     blockstr=$"Block or unblock emails from a given address"
234
     data=$(tempfile 2>/dev/null)
278
     data=$(tempfile 2>/dev/null)
307
         trap "rm -f $data" 0 1 2 5 15
351
         trap "rm -f $data" 0 1 2 5 15
308
         dialog --backtitle $"Freedombone User Control Panel" \
352
         dialog --backtitle $"Freedombone User Control Panel" \
309
                --title $"Change Email Filtering Rules" \
353
                --title $"Change Email Filtering Rules" \
310
-               --radiolist $"Choose an operation:" 13 70 6 \
354
+               --radiolist $"Choose an operation:" 14 70 7 \
311
                1 $"Add yourself to a mailing list" off \
355
                1 $"Add yourself to a mailing list" off \
312
                2 $"Remove yourself from a mailing list" off \
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
         sel=$?
362
         sel=$?
318
         case $sel in
363
         case $sel in
319
             1) break;;
364
             1) break;;
322
         case $(cat $data) in
367
         case $(cat $data) in
323
             1) add_to_mailing_list;;
368
             1) add_to_mailing_list;;
324
             2) remove_user_from_mailing_list;;
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
         esac
375
         esac
330
     done
376
     done
331
 }
377
 }