procmail переписывает тему, если получатель электронной почты не проходит проверку на соответствие

procmail переписывает тему, если получатель электронной почты не проходит проверку на соответствие

У меня есть локальный пользователь 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.

Связанный контент