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
|
Pigeonhole Sieve Usage
======================
Mailbox Names
-------------
Regarding separators, you need to specify mailbox names in Sieve scripts the
same way as IMAP clients see them. For example if you want to deliver mail to
the "Customers" mailbox which exists under "Work" mailbox:
* Namespace with 'prefix=""', 'separator=.' (Maildir default):
---%<-------------------------------------------------------------------------
require "fileinto";
fileinto "Work.Customers";
---%<-------------------------------------------------------------------------
* Namespace with 'prefix=INBOX.', 'separator=.' (Courier migration):
---%<-------------------------------------------------------------------------
require "fileinto";
fileinto "INBOX.Work.Customers";
---%<-------------------------------------------------------------------------
* Namespace with 'prefix=""', 'separator=/' (mbox, dbox default):
---%<-------------------------------------------------------------------------
require "fileinto";
fileinto "Work/Customers";
---%<-------------------------------------------------------------------------
However, Sieve uses UTF8 encoding for mailbox names, while IMAP uses modified
UTF7. This means that non-ASCII characters contained in mailbox names are
represented differently between IMAP and Sieve scripts.
Vacation auto-reply
-------------------
Vacation uses envelope sender and envelope recipient. They're taken from:
* Envelope sender: -f parameter to dovecot-lda if given, otherwise
Return-Path: header in the message.
* Envelope recipient: -a parameter to dovecot-lda if given, otherwise -d
parameter to dovecot-lda. If neither is given (delivering to system users),
the $USER environment is used.
The vacation replies are sent to the envelope sender.
List of autoreplied senders is stored in '.dovecot.lda-dupes' file in user's
home directory. When you're testing the vacation feature, it's easy to forget
that the reply is sent only once in the number of configured days. If you've
problems getting the vacation reply, try deleting this file. If that didn't
help, make sure the problem isn't related to sending mails in general by trying
the "reject" Sieve command.
The automatic replies aren't sent if any of the following is true:
* The envelope sender is not available (equal to <>)
* The envelope sender and envelope recipient are the same
* The sender recently (within :days days; default 7) got a reply from the same
vacation command
* The message contains at least one of the mailing list headers "list-id",
"list-owner", "list-subscribe", "list-post", "list-unsubscribe",
"list-help", or "list-archive"
* Auto-Submitted: header exists with any value except "no"
* Precedence: header exists with value "junk", "bulk" or "list"
* The envelope sender is considered a system address, which either:
* begins with "MAILER-DAEMON" (case-insensitive),
* begins with "LISTSERV" (case-insensitive),
* begins with "majordomo" (case-insensitive),
* contains the string "-request" anywhere within it (case-sensitive), or
* begins with "owner-" (case-sensitive)
* The envelope recipient and alternative addresses specified with the vacation
command's :addresses tag are not found in the message's To:, Cc:, Bcc:,
Resent-To:, Resent-Cc: or Resent-Bcc: fields.
Manually Compiling Sieve Scripts
--------------------------------
When the Sieve plugin executes a script for the first time (or after it has
been changed), it is compiled and stored in binary form (byte code) to avoid
compiling the script again for each subsequent mail delivery. The Pigeonhole
Sieve implementation uses the '.svbin' extension to store compiled Sieve
scripts (e.g.'.dovecot.svbin'). To store the binary, the plugin needs write
access in the directory in which the script is located.
A problem occurs when a global script is encountered by the plugin. For
security reasons, global script directories are not supposed to be writable by
the user. Therefore, the plugin cannot store the binary when the script is
first compiled. Note that this doesn't mean that the old compiled version of
the script is used when the binary cannot be written: it compiles and uses the
current script version. The only real problem is that the plugin will not be
able to update the binary on disk, meaning that the global script needs to be
recompiled each time it needs to be executed, i.e. for every incoming message,
which is inefficient.
To mitigate this problem, the administrator must manually pre-compile global
scripts using the 'sievec' command line tool. For example:
---%<-------------------------------------------------------------------------
sievec /var/lib/dovecot/sieve/global/
---%<-------------------------------------------------------------------------
This is necessary for scripts listed in the 'sieve_global_path', 'sieve_before'
and 'sieve_after' settings. For global scripts that are only included in other
scripts using the Sieve include extension, this step is not necessary, since
included scripts are incorporated into the binary produced for the main script.
Compile and Runtime Logging
---------------------------
Log messages produced during script compilation or during script execution are
written to two locations by the LDA Sieve plugin:
* A log file is written in the same directory as the user's main private
script (as specified by the 'sieve' setting). This log file bears the name
of that script file appended with ".log", e.g.'.dovecot.sieve.log'. If there
are errors or warnings in the script, the messages are appended to that log
file until it eventually grows too large (>10 kB currently). When that
happens, the old log file is moved to a ".log.0" file and an empty log file
is started. Informational messages are not written to this log file and the
log file is not created until messages are actually logged, i.e. when an
error or warning is produced.
* Messages that could be of interest to the system administrator are also
written to the Dovecot logging facility (usually syslog). This includes
informational messages that indicate what actions are executed on incoming
messages. Compile errors encountered in the user's private script are not
logged here.
(This file was created from the wiki on 2019-06-19 12:42)
|