Рейтинг:0

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

флаг in

У меня есть локальный пользователь procmail "bob".

Если приходит электронное письмо и оно совпадает с [email protected], никаких действий предпринимать не следует.

Однако, если приходит электронное письмо и находится на адресе [anything_else]@domain.com, я хотел бы переписать строку темы, чтобы вставить «[спам]» в начале строки темы.

Таким образом, это обратное совпадение для «bob@» (совпадение с чем угодно, кроме bob@), и мы сохраняем исходную строку темы, просто добавляя перед ней «[spam]».

Как я могу сделать это с помощью Procmail?

Рейтинг:1
флаг ar

Ваши требования довольно неясны. Procmail может найти любую строку, но действительно ли вы хотите искать строку в любом месте сообщения? И вы действительно хотите игнорировать сообщения без домен.com в них для целей этого правила?

:0 ХБ
* ! ()\<bob@домен\.com\>
* @домен\.com\>
{
    :0fhw
    * ^Тема:\/.+
    | formail -I"Тема: [спам]$MATCH"
}

\< и \> границы слов предотвращают сопоставление подстрок, таких как гробница или же subdomain.complete.org, а пустые скобки — это хак, потому что Procmail странно относится к регулярным выражениям, начинающимся с обратной косой черты.

Если вы имеете в виду, что хотите смотреть только в заголовках, отпустите НВ с первой строки двоеточия (можно оставить ЧАС но это по умолчанию, если вы не ставите никаких флагов). Если вы хотите сопоставить определенный заголовок, напишите его по буквам. Если вы хотите проверить получателя конкретно, ^TO_ макрос позволяет вам сделать это в нескольких разных заголовках (К:, Копия:и т. д.) легко.

:0fhw
* ! ^TO_bob@домен\.com\>
* ^TO_[^<>@ ]+@домен\.com\>
* ^Тема:\/.+
| formail -I"Тема: [спам]$MATCH"

Потому что мы бросили НВ флаги, мы можем комбинировать то, что раньше было двумя рецептами с разными флагами. Второй ^TO_ проверяет любой адрес, включая боб, которое, однако, уже было исключено предыдущим отрицательным условием.

У этого все еще есть некоторые краеугольные случаи, которые, возможно, потребуется изучить дополнительно; если вы можете отредактировать свой вопрос, чтобы уточнить его, возможно, я смогу обновить его, чтобы охватить не только основы.

Однако SMTP не требует указания получателя в заголовках. Классический случай СК: который также по сути является механизмом, используемым многими списками рассылки. Возможно, ваш MTA укажет получателя в Доставлен в: но, собственно говоря, этот тип фильтра лучше реализован в АПС.

user227963 avatar
флаг in
Нет, я не имею в виду искать строку где-либо в сообщении - только в поле "Кому"... поэтому, если "Кому" соответствует [email protected], никаких действий не предпринимается. НО, если в поле "КОМУ" что-то другое, то я хотел бы переписать строку темы со [СПАМ] в начале. Имеет смысл?
tripleee avatar
флаг ar
Что угодно или любой другой получатель в этом конкретном домене, как говорится в вашем вопросе? Второй пример уже показывает, как именно это сделать.
user227963 avatar
флаг in
Я проверил второй пример, и он работает очень хорошо, хотя есть одна вещь... если строка темы полностью пуста, она остается пустой - она ​​не перезаписывается...
tripleee avatar
флаг ar
Вы можете изменить последний `.+` в условии Subject: на `.*`, чтобы также захватывать пустые строки Subject:. (Однако никто не должен отправлять сообщения с пустой темой.)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.