11566
Comment:
|
12484
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
#rev 2018-11-22 maegger <<TableOfContents(3)>> |
|
Line 10: | Line 13: |
* sieve-connect on command line (is installed on all managed linux clients) | |
Line 22: | Line 26: |
<<BR>> {{attachment:filter1.png}} <<BR>> |
. {{attachment:filter1.png}} |
Line 30: | Line 32: |
<<BR>> {{attachment:filter2.png}} <<BR>> In the first section ''For incoming mail'' you define which emails are affected by this rule. With the '''+''' Symbol on the right you can add additional conditions. And on the top you define how these conditions are concatenated: || '''Option''' || '''Description''' || || Match all of the following rules || All conditions have to be fulfilled before the action below is applied || || Match any of the following rules || At least one condition has to be fulfilled before the action below is applied || || All messages || The action is applied to any email you receive || Here are some more detailed explanations of expressions you might come across when defining new filter rules: || '''Comparator''' || '''Description''' || || default || case insensitive comparison || || strict (octet) || case sensitive comparison || || case insensitive (ascii-casemap) || case insensitive comparison || || numeric (ascii-numeric) || comparison of numbers || The '''header''' field specifies, against which header field the comparison should be applied. This allows you to e.g. compare a "Received" field for its date. If there are multiple header fields of the type you specified, you can select the one that should be used with the '''index''' value. || '''Modifier''' || '''Description''' || || none || Test against all header fields || || address || Test against all header fields that contain addresses, i.e. From, To, Cc, Bcc, Sender, Resent-From, Resent-To, ... || || envelope || Test against email envelope (don't use this one unless you are familiar with email envelopes) || If a '''address''' or '''envelope''' modifier is in effect, you may choose, against which part of the email address the comparison should be done: || '''Type''' || '''Description''' || || all || Compare against the whole email address '''`user@domain.org`''' || || domain || Only compare against the domain part `user@`'''`domain.org`''' || || local part || Only compare against the local part '''`user`'''`@domain.org` || || user || Compare against the user part of the local part '''`user`'''`+organisation@domain.org` || || detail || Compare against the detail part of the local part `user+`'''`organisation`'''`@domain.org` || When one of your rules matches against the '''body''' of an email message, you can choose, how the email body should be transformed prior to the comparison: || '''Modifier''' || '''Description''' || || text || Compare against all text elemenst of an email body (i.e. plain text and html elements). Same as ''content type → text''. || || undecoded (raw) || Compare against the unmodified email body. Includes MIME part information. Don't use it unless you know what you are doing. || || content type || Compare against all MIME parts of the message with the given content type. You would most often use content types like '''`text`''', '''`text/plain`''' or '''`text/html`'''. || <<BR>> After pressing the save-button in the picture above you have added a new filter Moveto_1 to the isgdefault filter set and the output screen of '''Settings → Filters''' now is:<<BR>><<BR>> {{attachment:filter3.png}} <<BR>> |
. {{attachment:filter2.png}} In the first section ''For incoming mail'' you define which emails are affected by this rule. With the '''+''' Symbol on the right you can add additional conditions. And on the top you define how these conditions are concatenated: || '''Option''' || '''Description''' || || Match all of the following rules || All conditions have to be fulfilled before the action below is applied || || Match any of the following rules || At least one condition has to be fulfilled before the action below is applied || || All messages || The action is applied to any email you receive || Here are some more detailed explanations of expressions you might come across when defining new filter rules: || '''Comparator''' || '''Description''' || || default || case insensitive comparison || || strict (octet) || case sensitive comparison || || case insensitive (ascii-casemap) || case insensitive comparison || || numeric (ascii-numeric) || comparison of numbers || The '''header''' field specifies, against which header field the comparison should be applied. This allows you to e.g. compare a "Received" field for its date. If there are multiple header fields of the type you specified, you can select the one that should be used with the '''index''' value. || '''Modifier''' || '''Description''' || || none || Test against all header fields || || address || Test against all header fields that contain addresses, i.e. From, To, Cc, Bcc, Sender, Resent-From, Resent-To, ... || || envelope || Test against email envelope (don't use this one unless you are familiar with email envelopes) || If a '''address''' or '''envelope''' modifier is in effect, you may choose, against which part of the email address the comparison should be done: || '''Type''' || '''Description''' || || all || Compare against the whole email address '''`user@domain.org`''' || || domain || Only compare against the domain part `user@`'''`domain.org`''' || || local part || Only compare against the local part '''`user`'''`@domain.org` || || user || Compare against the user part of the local part '''`user`'''`+organisation@domain.org` || || detail || Compare against the detail part of the local part `user+`'''`organisation`'''`@domain.org` || When one of your rules matches against the '''body''' of an email message, you can choose, how the email body should be transformed prior to the comparison: || '''Modifier''' || '''Description''' || || text || Compare against all text elemenst of an email body (i.e. plain text and html elements). Same as ''content type → text''. || || undecoded (raw) || Compare against the unmodified email body. Includes MIME part information. Don't use it unless you know what you are doing. || || content type || Compare against all MIME parts of the message with the given content type. You would most often use content types like '''`text`''', '''`text/plain`''' or '''`text/html`'''. || <<BR>> After pressing the save-button in the picture above you have added a new filter Moveto_1 to the isgdefault filter set and the output screen of '''Settings → Filters''' now is:<<BR>><<BR>> . {{attachment:filter3.png}} <<BR>> |
Line 84: | Line 83: |
1. First of all you need to install the '''Sieve''' plugin. Unfortunately, the version in the official Thunderbird plugin archive is too old (version 0.2.2). So you need to download the plugin directly from the [[https://github.com/thsmi/sieve/tree/master/nightly|Development Builds]] website. Choose the youngest release. At the moment of this writing this is '''sieve-0.2.3h.xpi'''. Once downloaded, you can install it in Thunderbird through '''Add-ons Manager → Install Add-on From File...''' | 1. First of all you need to install the '''Sieve''' plugin. Unfortunately, the version in the official Thunderbird plugin archive is too old (version 0.2.2). So you need to download the newest plugin directly from the [[https://github.com/thsmi/sieve/releases/latest]]. In case the newest release isn't yet compatible with the newest version of Tunderbird we try to provide an [[Email/SieveAddon|intermediate version]]. Once you have downloaded the xpi-file, you can install it in Thunderbird through '''Add-ons Manager → Install Add-on From File...''' |
Line 117: | Line 116: |
== sieve-connect on command line == The command line tool sieve-connect can be used to manage your sieve filters in a terminal. To get a sieve shell enter: {{{ sieve-connect imap.ee.ethz.ch Sieve/IMAP Password: ReadLine support enabled. > help }}} With the commands 'list', 'edit' or 'download' and 'upload' you can now manage your sieve filter file(s). |
|
Line 118: | Line 127: |
Line 120: | Line 128: |
=== Putting specific mails into folders === To put all Mails coming from your mother '''{{{<mom@myhome.net>}}}''' into the folder '''{{{private}}}''' you can use the following sieve code: {{{ require ["fileinto"]; if address :is "from" "mom@myhome.net" { fileinto "INBOX/private"; } }}} |
|
Line 128: | Line 146: |
redirect :copy "peter.muster@gmail.com"; | redirect "peter.muster@gmail.com"; keep; |
Line 135: | Line 153: |
if header :contains "List-Id" "debian-security-announce.lists.debian.org" { fileinto "Inbox.Debian Security"; |
if header :contains "List-Id" "<debian-security-announce.lists.debian.org>" { fileinto "INBOX/Debian Security"; |
Line 144: | Line 162: |
A catchall email domain {{{somename.ethz.ch}}} delivers emails to e.g. {{{team@somename.ethz.ch}}} to the {{{somename}}} email account. It is the responsibility of that accounts owner to redirect that message to the right recipients (depending on the ''To'' address). The following sieve settings in the {{{somename}}} email account will redirect messages to "team@somename.ethz.ch" to the users "user1", "user2", and "user3." |
A catchall email domain {{{somename.ethz.ch}}} delivers emails to e.g. '''{{{<team@somename.ethz.ch>}}}''' to the '''{{{somename}}}''' email account. It is the responsibility of that accounts owner to redirect that message to the right recipients (depending on the ''To'' address). The following sieve settings in the '''{{{somename}}}''' email account will redirect messages to '''{{{<team@somename.ethz.ch>}}}''' to the users "user1", "user2", and "user3." |
Line 156: | Line 173: |
Line 166: | Line 184: |
fileinto "Inbox.Private"; | fileinto "INBOX/Private"; |
Line 171: | Line 189: |
Line 191: | Line 208: |
Contents
Email filtering
Email filtering can be done through Sieve. With Sieve, the filter rules are stored and applied on the mailserver. This is an advantage over client-side filtering, where emails are only filtered if you read them with a specific email client.
You have several options to manage your filters. You can use
Our roundcube webmailer https://email.ee.ethz.ch/
- Mozilla Thunderbird with the Sieve plugin
- KDE desktop program "Sieve Editor" (is installed on all managed linux clients)
- sieve-connect on command line (is installed on all managed linux clients)
We recommend to use our webmailer in the first place. Especially vacation messages can be defined in a very comfortable way through the webmailer. See Email/Vacation for further details. However, the Sieve interface of the webmailer only allows to define rather simple filter rules. For advanced rules, you have to use the Thunderbird plugin or the command line tool.
Do not switch back to the webmailer sieve management plugin after you have modified your filter file with another tool. The plugin uses own markers inside the sieve configuration file and does not recognize all available sieve filters. If you switch back to the webmailer the results of modifications are unpredictable.
The following sections will explain how you get started to manage your email filters with these tools. Choose the one that fits you best.
Manage email filtering rules with the webmailer
Login on https://email.ee.ethz.ch/.
Choose Settings → Filters.
In the Filter sets list, you will see the entry isgdefault. You may create other filter sets, but please note that only one filter set can be active at a time. We thus recommend that you select and use the isgdefault filter set through the webmailer.
In the Filters you can see the two default filters already configured in the isgdefault filter set:
Deduplicate (enabled) : discards duplicates of an already received mail
Vacation (disabled) : vacation message template
In the Filters column you may now create new filters with the + Symbol at the bottom of the column. Or you can select existing filters and adapt them or enable/disable/delete them through the sprockets symbol. The filter form is self explanatory. You can create or change your filters with drop-down lists and text fields. To edit the Vacation filter it is best to do that through Settings → Vacation.
In the first section For incoming mail you define which emails are affected by this rule. With the + Symbol on the right you can add additional conditions. And on the top you define how these conditions are concatenated:
Here are some more detailed explanations of expressions you might come across when defining new filter rules:Option
Description
Match all of the following rules
All conditions have to be fulfilled before the action below is applied
Match any of the following rules
At least one condition has to be fulfilled before the action below is applied
All messages
The action is applied to any email you receive
Comparator
Description
default
case insensitive comparison
strict (octet)
case sensitive comparison
case insensitive (ascii-casemap)
case insensitive comparison
numeric (ascii-numeric)
comparison of numbers
The header field specifies, against which header field the comparison should be applied. This allows you to e.g. compare a "Received" field for its date.
If there are multiple header fields of the type you specified, you can select the one that should be used with the index value.
Modifier
Description
none
Test against all header fields
address
Test against all header fields that contain addresses, i.e. From, To, Cc, Bcc, Sender, Resent-From, Resent-To, ...
envelope
Test against email envelope (don't use this one unless you are familiar with email envelopes)
If a address or envelope modifier is in effect, you may choose, against which part of the email address the comparison should be done:
Type
Description
all
Compare against the whole email address user@domain.org
domain
Only compare against the domain part user@domain.org
local part
Only compare against the local part user@domain.org
user
Compare against the user part of the local part user+organisation@domain.org
detail
Compare against the detail part of the local part user+organisation@domain.org
When one of your rules matches against the body of an email message, you can choose, how the email body should be transformed prior to the comparison:
Modifier
Description
text
Compare against all text elemenst of an email body (i.e. plain text and html elements). Same as content type → text.
undecoded (raw)
Compare against the unmodified email body. Includes MIME part information. Don't use it unless you know what you are doing.
content type
Compare against all MIME parts of the message with the given content type. You would most often use content types like text, text/plain or text/html.
After pressing the save-button in the picture above you have added a new filter Moveto_1 to the isgdefault filter set and the output screen of Settings → Filters now is:
Manage email filtering rules with Mozilla Thunderbird
Setup
First of all you need to install the Sieve plugin. Unfortunately, the version in the official Thunderbird plugin archive is too old (version 0.2.2). So you need to download the newest plugin directly from the https://github.com/thsmi/sieve/releases/latest. In case the newest release isn't yet compatible with the newest version of Tunderbird we try to provide an intermediate version. Once you have downloaded the xpi-file, you can install it in Thunderbird through Add-ons Manager → Install Add-on From File...
Enable Sieve filtering by right-clicking on you D-ITET mailfolder and choosing Settings -> Sieve Settings (see screenshot below).
Under the Sieve Settings menu entry, enable Sieve with Yes, manage Sieve scripts for this account and then select Change Settings...
Please make sure that you set at least the following options:In the Server tab:
Server Name → IMAP Server: imap.ee.ethz.ch
Server Port → 4190 (Default)
In the Security tab:
Connection Security → Force TLS
Authentication → IMAP Username and Password
Select OK to save the settings and to enable Sieve management from Thunderbird.
Edit Sieve Filters
In the Tools pull-down menu, select Sieve Message Filters...
The interface is self-explanatory. You see your default and activated filter script isgdefault in the list of the "Serverside Sieve mailfilters". Click the button Edit to edit the default file isgdefault or create a new one and activate it after editing. No rule creation wizzard is available so the offered syntax check function is very helpfull.
KDE desktop program "Sieve Editor"
You find this editor under Applications -> Internet -> Sieve Editor on our managed linux clients. After entering the imap server and your credentials and double-clicking the filter file to edit you get the following screen:
The user interface is self-explanatory and in comparison to the thunderbird plugin there are some templates listed in the middle which can be dragged and dropped to the file on the left.
sieve-connect on command line
The command line tool sieve-connect can be used to manage your sieve filters in a terminal. To get a sieve shell enter:
sieve-connect imap.ee.ethz.ch Sieve/IMAP Password: ReadLine support enabled. > help
With the commands 'list', 'edit' or 'download' and 'upload' you can now manage your sieve filter file(s).
Sieve filtering examples
Here is a Sieve tutorial to get you started: https://tty1.net/blog/2011/sieve-tutorial_en.html
Putting specific mails into folders
To put all Mails coming from your mother <mom@myhome.net> into the folder private you can use the following sieve code:
require ["fileinto"]; if address :is "from" "mom@myhome.net" { fileinto "INBOX/private"; }
Forwarding all mail
With procmail you have been able to forward all your mails with the .forward file in your home directory. With sieve this forwarding is done by the following rule:
redirect "peter.muster@gmail.com";
A forward of all mails with an additional local copy is done with:
redirect "peter.muster@gmail.com"; keep;
Header based filtering
Filters can be based on the whole content of the envelope email header. The following example shows a filter looking for the List-Id entry in the header normally present in received mails from a subscribed mailing list:
require ["fileinto", "envelope"]; if header :contains "List-Id" "<debian-security-announce.lists.debian.org>" { fileinto "INBOX/Debian Security"; }
Program execution
The execution of external tools is not supported in Sieve. What was done earlier with formail can mostly also be done with sieve itself.
Catchall filter
A catchall email domain somename.ethz.ch delivers emails to e.g. <team@somename.ethz.ch> to the somename email account. It is the responsibility of that accounts owner to redirect that message to the right recipients (depending on the To address).
The following sieve settings in the somename email account will redirect messages to <team@somename.ethz.ch> to the users "user1", "user2", and "user3."
if address :is ["to", "cc", "bcc"] "team@somename.ethz.ch" { redirect "user1@ee.ethz.ch"; redirect "user2@ee.ethz.ch"; redirect "user3@ee.ethz.ch"; }
Subaddress Filtering
Most mail servers allow the use of subaddressing in the local (left) part of an email address. An email address with subaddressing looks like this:
pmuster+private@ee.ethz.ch
All mails adressed to pmuster+<subaddress tag>@ee.ethz.ch are delivered to user pmuster. This user can now process the incoming mail in different ways depending on the subaddress-tag. A typical rule based on the subaddress tag looks like this:
require ["envelope", "subaddress", "fileinto"]; # Move mails addressed to "pmuster+private" to Private folder if envelope :detail "to" "private" { fileinto "INBOX/Private"; }
Deduplicate filter
With procmail it was possible to delete duplicate emails (i.e. if you get exactly the same email through different ways) with the following rule in .procmailrc:
:0 Wh: $HOME/.procmail_msgid_lock | formail -D 8192 $HOME/.procmail_msgid_cache
With Sieve you can get the same result with the following rule:
require ["duplicate"]; if duplicate { discard; }
Header manipulations
Email headers can be edited through the editheader plugin. It's possible to modify, add or delete header entrys. The following example replaces the subject for emails sent to team@somename.ethz.ch with [TEAMINFO] Original subject.
require ["editheader", "variables"]; if address :is ["to", "bcc", "cc"] "team@somename.ethz.ch" { if header :matches "Subject" "*" { set "subject" "${1}"; deleteheader :index 1 "Subject"; addheader :last "Subject" "[TEAMINFO] ${subject}"; } }