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
|
--TEST--
Main test of script parser
--SKIPIF--
--FILE--
<?php
include '../lib/rcube_sieve_script.php';
$txt = '
require ["fileinto","vacation","reject","relational","comparator-i;ascii-numeric","imapflags"];
# rule:[spam]
if anyof (header :contains "X-DSPAM-Result" "Spam")
{
fileinto "Spam";
stop;
}
# rule:[test1]
if anyof (header :contains ["From","To"] "test@domain.tld")
{
discard;
stop;
}
# rule:[test2]
if anyof (not header :contains ["Subject"] "[test]", header :contains "Subject" "[test2]")
{
fileinto "test";
stop;
}
# rule:[test-vacation]
if anyof (header :contains "Subject" "vacation")
{
vacation :days 1 text:
# test
test test /* test */
test
.
;
stop;
}
# rule:[comments]
if anyof (true) /* comment
* "comment" #comment */ {
/* comment */ stop;
# comment
}
# rule:[reject]
if size :over 5000K {
reject "Message over 5MB size limit. Please contact me before sending this.";
}
# rule:[redirect]
if header :value "ge" :comparator "i;ascii-numeric"
["X-Spam-score"] ["14"] {redirect "test@test.tld";}
# rule:[imapflags]
if header :matches "Subject" "^Test$" {
setflag "\\\\Seen";
addflag ["\\\\Answered","\\\\Deleted"];
}
';
$s = new rcube_sieve_script($txt);
echo $s->as_text();
?>
--EXPECT--
require ["fileinto","vacation","reject","relational","comparator-i;ascii-numeric","imapflags"];
# rule:[spam]
if header :contains "X-DSPAM-Result" "Spam"
{
fileinto "Spam";
stop;
}
# rule:[test1]
if header :contains ["From","To"] "test@domain.tld"
{
discard;
stop;
}
# rule:[test2]
if anyof (not header :contains "Subject" "[test]", header :contains "Subject" "[test2]")
{
fileinto "test";
stop;
}
# rule:[test-vacation]
if header :contains "Subject" "vacation"
{
vacation :days 1 text:
# test
test test /* test */
test
.
;
stop;
}
# rule:[comments]
if true
{
stop;
}
# rule:[reject]
if size :over 5000K
{
reject "Message over 5MB size limit. Please contact me before sending this.";
}
# rule:[redirect]
if header :value "ge" :comparator "i;ascii-numeric" "X-Spam-score" "14"
{
redirect "test@test.tld";
}
# rule:[imapflags]
if header :matches "Subject" "^Test$"
{
setflag "\\Seen";
addflag ["\\Answered","\\Deleted"];
}
|