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
|
IMAPSIEVE plugins for Pigeonhole
Relevant specifications
=======================
doc/rfc/imapsieve.rfc6785.txt
Introduction
============
As defined in the base specification, the Sieve language is used only during
delivery. However, in principle, it can be used at any point in the processing
of an email message. RFC 6785 defines the use of Sieve filtering in IMAP,
operating when messages are created or their attributes are changed. This
feature extends both Sieve and IMAP. Therefore, Pigeonhole provides both an
IMAP and a Sieve plugin. The IMAP plugin is called "imap_sieve" and the Sieve
plugin is called "sieve_imapsieve".
The basic IMAPSIEVE capability allows attaching a Sieve script to a mailbox
(or any mailbox) by setting a special IMAP METADATA entry. This way, users can
configure Sieve scripts that are run for IMAP events in their mailboxes. The
Pigeonhole implementation also adds the ability for administrators to configure
Sieve scripts outside the user's control, that are run either before or after a
user's script if there is one.
Dovecot-specific Environment Items
==================================
The "imapsieve" extension defined in RFC 6785 defines additional environment
items for the "environment" extension defined in RFC 5183. Beyond those, Dovecot
defines a few more. These are available when the Dovecot-specific
"vnd.dovecot.imapsieve" extension is enabled using the "require" command. The
"vnd.dovecot.imapsieve" extension implicitly uses the "imapsieve" extension, so
that extension does not need to be enabled as well in that case. The following
Dovecot-specific environment items are added:
vnd.dovecot.mailbox-from
The mailbox where the message is being copied or moved from (the source
mailbox). This environment item is only set when the Sieve script is executed
from an IMAP COPY or MOVE command.
vnd.dovecot.mailbox-to
The mailbox where the message is being copied to (the destination mailbox).
If the Sieve script is not executed from an IMAP COPY or MOVE command, this
environment is always equal to the "imap.mailbox" environment item. Otherwise,
the "imap.mailbox" item points to the mailbox where the Sieve script is
executing for, which may actually be the source mailbox (see the
imapsieve_mailboxXXX_copy_source_after setting).
Configuration
=============
The IMAP plugin is activated by adding it to the mail_plugins setting for
the imap protocol:
protocol imap {
mail_plugins = $mail_plugins imap_sieve
}
This only will enable support for administrator scripts. User scripts are only
supported when additionally a Sieve URL is configured using the imapsieve_url
plugin setting. This URL points to the ManageSieve server that users need to use
to upload their Sieve scripts. This URL will be shown to the client in the IMAP
CAPABILITY response as IMAPSIEVE=<URL>.
The Sieve plugin is activated by adding it to the sieve_plugins setting:
sieve_plugins = sieve_imapsieve
This plugin registers the "imapsieve" extension with the Sieve interpreter. This
extension is enabled implicitly, which means that it does not need to be added
to the "sieve_extensions" setting.
Note that the "imapsieve" extension can only be used from IMAP. When it is used
in the active delivery script, it will cause runtime errors. To make a Sieve
script suitable for both delivery and IMAP, the availability of the extension
can be tested using the "ihave" test (RFC 5463) as usual.
The following settings are recognized the "imap_sieve" plugin:
imapsieve_url =
If configured, this setting enables support for user Sieve scripts in IMAP.
So, leave this unconfigured if you don't want users to have the ability to
associate Sieve scripts with mailboxes. The value is an URL pointing to the
ManageSieve server that users must use to upload their Sieve scripts.
imapsieve_mailboxXXX_name =
This setting configures the name of a mailbox for which administrator scripts
are configured. The `XXX' in this setting is a sequence number, which allows
configuring multiple associations between Sieve scripts and mailboxes. The
settings defined hereafter with matching sequence numbers apply to the mailbox
named by this setting. The sequence of configured mailboxes ends at the first
missing "imapsieve_mailboxXXX_name" setting. This setting supports wildcards
with a syntax compatible with the IMAP LIST command, meaning that this
setting can apply to multiple or even all ("*") mailboxes.
imapsieve_mailboxXXX_before =
imapsieve_mailboxXXX_after =
When an IMAP event of interest occurs, these sieve scripts are executed before
and after any user script respectively. These settings each specify the
location of a single sieve script. The semantics of these settings are very
similar to the "sieve_before" and "sieve_after" settings: the specified
scripts form a sequence together with the user script in which the next script
is only executed when an (implicit) keep action is executed.
imapsieve_mailboxXXX_causes =
Only execute the administrator Sieve scripts for the mailbox configured with
"imapsieve_mailboxXXX_name" when one of the listed IMAPSIEVE causes apply.
This has no effect on the user script, which is always executed no matter the
cause.
imapsieve_mailboxXXX_from =
Only execute the administrator Sieve scripts for the mailbox configured with
"imapsieve_mailboxXXX_name" when the message originates from the indicated
mailbox. This setting supports wildcards with a syntax compatible with the
IMAP LIST command
imapsieve_mailboxXXX_copy_source_after =
When the cause is "COPY", run the specified Sieve script for the message in
the source mailbox after the Sieve script for the corresponding message in the
destination mailbox successfully finishes executing . This does not apply to
moved messages, since the message is removed from the source mailbox in that
case.
imapsieve_expunge_discarded=no
When enabled, discarded messages (for which no keep action is in effect) will
be expunged immediately when the Sieve script execution is succcessful.
Normally, such messages are only marked with the "\Deleted" flag and will be
expunged only when the client explicitly issues an IMAP EXPUNGE command on the
mailbox at a later time.
Example
-------
protocol imap {
# Space separated list of plugins to load (default is global mail_plugins).
mail_plugins = $mail_plugins imap_sieve
}
plugin {
sieve_plugins = sieve_imapsieve
imapsieve_url = sieve://sieve.example.org
# From elsewhere to Spam folder
imapsieve_mailbox1_name = Spam
imapsieve_mailbox1_causes = COPY
imapsieve_mailbox1_before = file:/usr/lib/dovecot/sieve/report-spam.sieve
# From Spam folder to elsewhere
imapsieve_mailbox2_name = *
imapsieve_mailbox2_from = Spam
imapsieve_mailbox2_causes = COPY
imapsieve_mailbox2_before = file:/usr/lib/dovecot/sieve/report-ham.sieve
}
|