@@ -135,41 +135,69 @@ private function mail_user_filter_get_rule($page_form) {
135135 $ content .= '### BEGIN FILTER_ID: ' .$ page_form ->id ."\n" ;
136136
137137 //$content .= 'require ["fileinto", "regex", "vacation"];'."\n";
138-
139- $ content .= 'if header :regex [" ' .strtolower ($ page_form ->dataRecord ["source " ]).'"] [" ' ;
140-
141- $ searchterm = preg_quote ($ page_form ->dataRecord ["searchterm " ]);
142- $ searchterm = str_replace (
143- array (
144- '" ' ,
145- '\\[ ' ,
146- '\\] '
147- ),
148- array (
149- '\\" ' ,
150- '\\\\[ ' ,
151- '\\\\] '
152- ), $ searchterm );
153-
154- if ($ page_form ->dataRecord ["op " ] == 'contains ' ) {
155- $ content .= ".* " .$ searchterm ;
156- } elseif ($ page_form ->dataRecord ["op " ] == 'is ' ) {
157- $ content .= "^ " .$ searchterm ."$ " ;
158- } elseif ($ page_form ->dataRecord ["op " ] == 'begins ' ) {
159- $ content .= "^ " .$ searchterm .".* " ;
160- } elseif ($ page_form ->dataRecord ["op " ] == 'ends ' ) {
161- $ content .= ".* " .$ searchterm ."$ " ;
138+
139+ if ($ page_form ->dataRecord ["op " ] == 'domain ' ) {
140+ $ content .= 'if address :domain :is " ' .strtolower ($ page_form ->dataRecord ["source " ]).'" " ' .$ page_form ->dataRecord ["searchterm " ].'" { ' ."\n" ;
141+ } elseif ($ page_form ->dataRecord ["op " ] == 'localpart ' ) {
142+ $ content .= 'if address :localpart :is " ' .strtolower ($ page_form ->dataRecord ["source " ]).'" " ' .$ page_form ->dataRecord ["searchterm " ].'" { ' ."\n" ;
143+ } elseif ($ page_form ->dataRecord ["source " ] == 'Size ' ) {
144+ if (substr (trim ($ page_form ->dataRecord ["searchterm " ]),-1 ) == 'k ' || substr (trim ($ page_form ->dataRecord ["searchterm " ]),-1 ) == 'K ' ) {
145+ $ unit = 'k ' ;
146+ } else {
147+ $ unit = 'm ' ;
148+ }
149+ $ content .= 'if size :over ' .intval ($ page_form ->dataRecord ["searchterm " ]).$ unit .' { ' ."\n" ;
150+ } else {
151+
152+ if ($ page_form ->dataRecord ["source " ] == 'Header ' ) {
153+ $ parts = explode (': ' ,trim ($ page_form ->dataRecord ["searchterm " ]));
154+ $ page_form ->dataRecord ["source " ] = trim ($ parts [0 ]);
155+ unset($ parts [0 ]);
156+ $ page_form ->dataRecord ["searchterm " ] = trim (implode (': ' ,$ parts ));
157+ unset($ parts );
158+ }
159+
160+ $ content .= 'if header :regex [" ' .strtolower ($ page_form ->dataRecord ["source " ]).'"] [" ' ;
161+
162+ $ searchterm = preg_quote ($ page_form ->dataRecord ["searchterm " ]);
163+ $ searchterm = str_replace (
164+ array (
165+ '" ' ,
166+ '\\[ ' ,
167+ '\\] '
168+ ),
169+ array (
170+ '\\" ' ,
171+ '\\\\[ ' ,
172+ '\\\\] '
173+ ), $ searchterm );
174+
175+ if ($ page_form ->dataRecord ["op " ] == 'contains ' ) {
176+ $ content .= ".* " .$ searchterm ;
177+ } elseif ($ page_form ->dataRecord ["op " ] == 'is ' ) {
178+ $ content .= "^ " .$ searchterm ."$ " ;
179+ } elseif ($ page_form ->dataRecord ["op " ] == 'begins ' ) {
180+ $ content .= " " .$ searchterm ."" ;
181+ } elseif ($ page_form ->dataRecord ["op " ] == 'ends ' ) {
182+ $ content .= ".* " .$ searchterm ."$ " ;
183+ }
184+
185+ $ content .= '"] { ' ."\n" ;
162186 }
163187
164- $ content .= '"] { ' ."\n" ;
165-
166188 if ($ page_form ->dataRecord ["action " ] == 'move ' ) {
167- $ content .= ' fileinto " ' .$ page_form ->dataRecord ["target " ].'"; ' . "\n" ;
189+ $ content .= ' fileinto " ' .$ page_form ->dataRecord ["target " ].'"; ' . "\n stop; \n" ;
190+ } elseif ($ page_form ->dataRecord ["action " ] == 'keep ' ) {
191+ $ content .= " keep; \n" ;
192+ } elseif ($ page_form ->dataRecord ["action " ] == 'stop ' ) {
193+ $ content .= " stop; \n" ;
194+ } elseif ($ page_form ->dataRecord ["action " ] == 'reject ' ) {
195+ $ content .= ' reject " ' .$ page_form ->dataRecord ["target " ].'"; stop;\n\n ' ;
168196 } else {
169- $ content .= " discard; \n" ;
197+ $ content .= " discard; \n stop; \n " ;
170198 }
171199
172- $ content .= " stop; \n } \n" ;
200+ $ content .= "} \n" ;
173201
174202 $ content .= '### END FILTER_ID: ' .$ page_form ->id ."\n" ;
175203
0 commit comments