====== Filter your emails with sieve ======
# apt-get install sieve-connect
===== Connexion to Sieve =====
$ sieve-connect -s localhost -p 4190 -u julien -m plain
connecting to localhost
Please enter your password:
> ls
filters_julien.sieve <- active script
> get filters_julien.sieve Filtre_Sieve_Julien
require
["fileinto","envelope","reject","vacation","imapflags","relational","comparator-i;ascii-numeric","regex","notify"];
}
if header :contains "X-Spam-Flag" "YES" {
fileinto "user.julien.Spam";
stop;
}
> quit
**Explanation**: connect to the sieve shell with your username and password.
The **ls** command (or list) lists the available scripts and shows the one that is active (one at a time).
**get** allows you to download the script you want (the second argument is the output file).
===== Edit the filters =====
Locally, with a text editor, modify the filter file.
Each filter script **must** start with the //require// line, as follow:
require
["fileinto","envelope","reject","vacation","imapflags","relational","comparator-i;ascii-numeric","regex","notify"];
Then, write your rules. Follow example below (used to filter spam detected by spamassassin)
if header :contains "X-Spam-Flag" "YES" {
fileinto "user.julien.Spam";
stop;
}
examples (from the [[http://rfc-ref.org/RFC-TEXTS/3028/chapter3.html|RFC]]) :
if header :contains "from" "coyote" {
discard;
} elsif header :contains ["subject"] ["$$$"] {
discard;
} else {
fileinto "INBOX";
}
if header :contains ["From"] ["coyote"] {
redirect "acm@example.edu";
} elsif header :contains "Subject" "$$$" {
redirect "postmaster@example.edu";
} else {
redirect "field@example.edu";
}
Available testing parameters are available here :
[[http://rfc-ref.org/RFC-TEXTS/3028/chapter5.html|http://rfc-ref.org/RFC-TEXTS/3028/chapter5.html]]
You can also add actions, like **addflag "\\Seen"** that is going to mark the message as read in the IMAP server.
if header :contains "X-Spam-Flag" "YES" {
addflag "\\Seen";
fileinto "user.julien.Spam";
stop;
}
===== Load the filters =====
$ sieve-connect -s localhost -p 4190 -u julien -m plain
connecting to localhost
Please enter your password:
> put filter_sieve
> list
filters <- active script
filter_sieve
> activate filter_sieve
> list
filters
filter_sieve <- active script
> quit
- The **put** command upload the script on the server
- **activate** mark a script to be usable by the server
===== DEPRECATED: Verify that the sieve server is launched in cyrus =====
In **/etc/cyrus.conf**, verify that sieve is listed in the services section:
SERVICES {
[...]
sieve cmd="timsieved" listen="sieve" prefork=0 maxchild=100
[...]
}
Then, make sure sieve listens on port 2000 (by default):
# grep sieve /etc/services
sieve 2000/tcp # Sieve mail filter daemon
# netstat -tpan |grep 2000
tcp 0 0 0.0.0.0:2000 0.0.0.0:* LISTEN 3336/cyrmaster
tcp6 0 0 :::2000 :::* LISTEN 3336/cyrmaster