У меня есть локальный пользователь procmail «bob».
Если приходит электронное письмо и оно совпадает[email protected], то никаких действий предпринимать не следует.
Однако если приходит электронное письмо с адреса [anything_else]@domain.com, то я бы хотел изменить тему письма, вставив в начало строки «[спам]».
Таким образом, это обратное совпадение по «bob@» (совпадение по чему угодно, кроме bob@), и мы сохраняем исходную строку темы, просто добавляя «[спам]» в начало.
Как это сделать с помощью Procmail?
решение1
Ваши требования довольно неясны. Procmail может сопоставлять любую строку, но вы действительно имеете в виду искать строку где-либо в сообщении? И вы действительно имеете в виду игнорировать сообщения без domain.com
в целях этого правила?
:0 HB
* ! ()\<bob@domain\.com\>
* @domain\.com\>
{
:0fhw
* ^Subject:\/.+
| formail -I"Subject: [spam]$MATCH"
}
Границы \<
слов \>
и предотвращают сопоставление подстрок типа tombob
или subdomain.complete.org
, а пустые скобки — это хак, поскольку Procmail странно относится к регулярным выражениям, которые начинаются с обратной косой черты.
Если вы имеете в виду, что хотите искать только в заголовках, удалите HB
из первой строки двоеточия (вы можете оставить , H
но это значение по умолчанию, если вы не ставите никаких флагов). Если вы хотите сопоставить определенный заголовок, напишите его. Если вы хотите проверить получателя конкретно, макрос ^TO_
позволяет вам легко сделать это в нескольких различных заголовках ( To:
, Cc:
, и т. д.).
:0fhw
* ! ^TO_bob@domain\.com\>
* ^TO_[^<>@ ]+@domain\.com\>
* ^Subject:\/.+
| formail -I"Subject: [spam]$MATCH"
Поскольку мы сбросили HB
флаги, мы можем объединить то, что раньше было двумя рецептами с разными флагами. Второй ^TO_
проверяет любой адрес, включая bob
, который, однако, уже был исключен предыдущим отрицательным условием.
Здесь все еще есть некоторые особые случаи, которые, возможно, требуют более глубокого изучения; если вы сможете отредактировать свой вопрос, чтобы прояснить его, возможно, я смогу обновить его, чтобы охватить больше, чем просто основы.
Хотя SMTP не требует, чтобы получатель был указан в заголовках. Классический случай — это Bcc:
то, что также по сути является механизмом, используемым многими списками рассылки. Возможно, ваш MTA будет указывать получателя, Delivered-To:
но, честно говоря, этот тип фильтра лучше реализовать в MTA.