Sieve by the addressee

Darac Marjal mailinglist at darac.org.uk
Sat Feb 20 20:51:14 EET 2021


On 20/02/2021 18:02, Shawn Heisey wrote:
> On 2/20/2021 8:50 AM, Markus Schönhaber wrote:
>> I consider it a better idea to filter mailing list messages by their
>> List-ID header.
>
> I agree with Markus.  It's what I do.  This works well:
>
> if header :regex "list-id" "solr-user.lucene.apache.org"
> {
>         fileinto "asf.solr-user";
>         stop;
> }
>
> I do not know if List-ID is common to all mailing list software, but
> even if it's not, there should be something available in the message
> headers that you can use.

It's not, but it's fairly common. A few years ago someone posted a
strategy for procmail that handled almost any kind of mailinglist
software. I've translated that to the following sieve script (which, now
that I look at it, could probably do with a bit of optimisation):

# split out the various list forms
# Apparently, mutt-users has some odd format, so handle it specially.
if exists "list-post" {
      if header :regex "list-post" "<mailto:([a-z_0-9-]+)[.@]" {
            set :lower "listname" "${1}";
            fileinto :create "${listname}";
      } else {
            keep;
      }
}
# Mailman & other lists using list-id
elsif exists "list-id" {
    if header :regex "list-id" "<([a-z_0-9-]+)[.@]" {
        set :lower "listname" "${1}";
        fileinto :create "${listname}";
    } else {
        if header :regex "list-id" "^\\s*<?([a-z_0-9-]+)[.@]" {
            set :lower "listname" "${1}";
            fileinto :create "${listname}";
        } else {
            keep;
        }
    }
    stop;
}
# Listar and mailman like
elsif exists "x-list-id" {
    if header :regex "x-list-id" "<([a-z_0-9-]+)\\\\." {
        set :lower "listname" "${1}";
        fileinto :create "${listname}";
    } else {
        keep;
    }
    stop;
}
# Ezmlm
elsif exists "mailing-list" {
    if header :regex "mailing-list" "([a-z_0-9-]+)@" {
        set :lower "listname" "${1}";
        fileinto :create "${listname}";
    } else {
        keep;
    }
    stop;
}
# York lists service
elsif exists "x-mailing-list" {
    if header :regex "x-mailing-list" "^\\s*([a-z_0-9-]+)@?" {
        set :lower "listname" "${1}";
        fileinto :create "${listname}";
    } else {
        keep;
    }
    stop;}
# Smartlist
elsif exists "x-loop" {
      if header :regex "x-loop" "^\\s*(a-z_0-9-]+)@?" {
            set :lower "listname" "${1}";
            fileinto :create "${listname}";
    } else {
        keep;
    }
    stop;
}
# poorly identified
elsif envelope :contains "from" "owner-" {
    if envelope :regex "from" "owner-([a-z_0-9-]+)-outgoing@" {
        set :lower "listname" "${1}";
        fileinto :create "${listname}";
    } elsif envelope :regex "from" "owner-([a-z_0-9-]+)@" {
        set :lower "listname" "${1}";
        fileinto :create "${listname}";
    } elsif header :regex "Sender" "owner-([a-z_0-9-]+)@" {
        set :lower "listname" "${1}";
        fileinto :create "${listname}";
    } else {
        keep;
    }
    stop;
}
# other poorly identified
elsif  envelope :contains "from" "-request" {
    if envelope :regex "from" "([a-z_0-9-]+)-request@" {
        set :lower "listname" "${1}";
        fileinto :create "${listname}";
    } else {
        keep;
    }
    stop;
}


>
> Thanks,
> Shawn
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 840 bytes
Desc: OpenPGP digital signature
URL: <https://dovecot.org/pipermail/dovecot/attachments/20210220/6a12e691/attachment.sig>


More information about the dovecot mailing list