dovecot-sieve with FreeBSD

Sieve plugin for dovecot LDA (* libsieve comes from the cyrus imap server (mail/cyrus-imapd23) )

Obtain the sieve plugin from CVS:

cvs -d :pserver:anonymous@dovecot.org:/home/cvs co dovecot-sieve

On FreeBSD change the autogen.sh file contents to:

# using automake19, autoconf259, and libtool15 ports.
aclocal19 -I /usr/local/share/aclocal
autoheader259
libtoolize –force
automake19 –add-missing
autoconf259

Then, run it:

./autogen.sh

Install this sieve plugin:

# NB: Before you continue, make sure you didn’t clean the dovecot
# port when you’ve build it, eg: built it using:
#
# cd /usr/ports/mail/dovecot/ && make install
#
# You can clean it after you’ve build the sieve plugin though.

./configure \
–prefix=/usr/local \
–with-dovecot=/usr/ports/mail/dovecot/work/dovecot-1.0.rc7
make install

Configure dovecot to use the sieve plugin:

vim /usr/local/etc/dovecot.conf
protocol lda {

mail_plugins = cmusieve # … other plugins

}

Make a test sieve script:

cat <<„EOF“ > /var/vmail/two.example.com/rgl/.dovecot.sieve
require [„fileinto“, „reject“, „vacation“];
# * A sieve script is UTF-8 encoded.
#
# * folders are automatically created by the „fileinto“ action.
#
# * By default (when no :comparator argument is given) all string
# comparations are case-insensitive (in the ASCII range;
# :comparator „i;ascii-casemap“).
# See the „2.7.3. Comparators“ section at
# http://www.ietf.org/internet-drafts/draft-ietf-sieve-3028bis-09.txt
#
# See sieve information at
# http://www.ietf.org/html.charters/sieve-charter.html
# For „vacation“ see
# http://ietfreport.isoc.org/idref/draft-ietf-sieve-vacation/

# Moved SPAM marked messages to the Spam folder and stop processing.
if header „X-Spam-Flag“ „YES“ {
fileinto „Spam“
stop;
}

# Move all mailer-daemon@ into a subfolder
if header
:contains
[„To“, „Cc“, „Bcc“, „Reply-To“, „In-Reply-To“]
[
„mailer-daemon at two.example.com“,
„mailer-daemon at example.com“,
„mailer-daemon at turbina.example.com“
] {
fileinto „mailer-daemon“
stop;
}

# OR, using :matches:

if header
:matches
[„To“, „Cc“, „Bcc“, „Reply-To“, „In-Reply-To“]
[„mailer-daemon@*“] {
fileinto „mailer-daemon“
stop;
}

# move all mail @foxie.example.com to a subfolder.
if header :matches „To“ „*@foxie.example.com“ {
fileinto „foxie“
stop;
}

# Some misc. tests follow.

if header :contains „subject“ [„test1“, „test3“] {
fileinto „test-odd“
} elsif header :contains „subject“ [„test2“, „test4“] {
fileinto „test-even“
} elsif header „subject“ „reject“ {
reject „reject test!“
} elsif header „subject“ „discard“ {
# discarded message are silently droped.
discard;
} elsif header „subject“ „redirect“ {
# this will redirect the message to „root“ user, without storing the
# message in our mailbox.
# NB: Because, in my case, the „postmaster“ is an alias to this same
# mailbox, so we also test the loop prevention mechanism of
# dovecot LDA.
# AND in this case we will NOT receive any message on our email
# box.
# sent emails ids are stored inside ~/.dovecot.lda-dupes
redirect „postmaster at two.example.com“
} elsif header „subject“ „redirect to bob“ {
redirect „bob at two.example.com“
} elsif header „subject“ „vacation“ {
# sent emails ids are stored inside ~/.dovecot.lda-dupes in order to
# detect loops.
# List of auto replied senders are also stored here in order to
# prevent multiple replies to the same sender for a given period of
# time (defaults to 7 days [see src/libsieve/sieve.y]; min is 1 day,
# max is 31 days)
vacation „I’m out! I’ll reply when I get back“
}
EOF

NB: Errors on the sieve script are reported on the maillog and in a
file named .dovecot.sieve.err near the normal .dovecot.sieve.

# In this little „tests“, I have several test mailboxes, like
# rgl at two.example.com, alice at two.example.com, etc, which are handled by
# dovecot LDA with a sieve script.

printf ‘Subject: test1\n\ntesting!\n’ | sendmail rgl at two.example.com

printf ‘Subject: reject\n\ntesting!\n’ | sendmail rgl at two.example.com

printf ‘Subject: discard\n\ntesting!\n’ | sendmail rgl at two.example.com

printf ‘Subject: redirect\n\ntesting!\n’ \
| sendmail -f alice at two.example.com rgl at two.example.com

printf ‘Subject: redirect to bob\n\ntesting!\n’ \
| sendmail -f alice at two.example.com rgl at two.example.com

printf ‘Subject: test2\nX-Spam-Status: Yes\n\ntesting!\n’ \
| sendmail rgl at two.example.com

printf ‘Subject: vacation\n\ntesting!\n’ \
| sendmail -f alice at two.example.com rgl at two.example.com