Рейтинг:0

Как отфильтровать и доставить сообщение в Procmail

флаг in

Я переписываю строку темы для некоторых входящих писем в зависимости от КОМУ: поле:

:0fhw
* ! ^TO_user@домен\.com\>
* ^TO_[^<>@ ]+@домен\.com\>
* ^Тема:\/.+
| /usr/local/bin/formail -I"Тема: [СПАМ]$MATCH"

Приведенный выше код (из моего предыдущего вопроса procmail переписывает строку темы, если пользователь-получатель электронной почты не проходит тест на совпадение) работает отлично - если я получаю почту от кого-то, КРОМЕ [email protected], строка темы переписывается как [СПАМ] (исходная тема)

Но я хотел бы сделать несколько таких условных выражений - рабочий блок выше будет последним, но перед этим я хотел бы переписать строку темы, если ТО соответствует другому адресу.

Поэтому я добавил этот блок прямо над ним:

:0fh
* ^TO_special@домен\.com
* ^Тема:\/.+
| /usr/local/bin/formail -I"Тема: [СПЕЦИАЛЬНАЯ]$MATCH"
$ПО УМОЛЧАНИЮ

... и это работает - электронные письма, отправленные на «[email protected]», переписывают свою строку темы.

Проблема в том, что Procmail не останавливается — он переходит на следующий блокирует и перезаписывает его снова. Таким образом, письма, отправленные на специальный@домен.com переписать их темы как:

[СПАМ] [СПЕЦИАЛЬНОЕ] Оригинальная тема письма, бла-бла

Почему это? Почему не $ПО УМОЛЧАНИЮ действие в конце первого блока приводит к тому, что Procmail останавливает обработку этого фрагмента электронной почты?

Как я могу сопоставить новый блок и останавливаться обработать этот кусок почты и просто покончить с этим?

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

$ПО УМОЛЧАНИЮ в конце синтаксическая ошибка. Вы не можете указать несколько действий для одного и того же рецепта.

Что вы можете сделать, так это разделить его на два рецепта; или, в этом случае, просто совместите рерайт и доставку.

:0:
* ^TO_special@домен\.com
* ^Тема:\/.+
| /usr/local/bin/formail -I"Тема: [СПЕЦИАЛЬНЫЙ]$MATCH" >>$DEFAULT

Это больше не имеет фх флаги, потому что мы хотим протолкнуть все сообщение (а не только заголовки, которые час делает), и мы хотим доставить, а не зафиксировать результаты конвейера обратно в Procmail (который ф делает).

Это предполагает, что $ПО УМОЛЧАНИЮ это файл, а не каталог; и, таким образом, мы также добавляем второй : указать блокировку.

Если вы хотите указать два действия при одном наборе условий, вы можете использовать фигурные скобки с несколькими рецептами внутри них. Каждый рецепт может иметь ноль или более условий, но только одно действие.

:0
* ^TO_special@домен\.com
* ^Тема:\/.+
{
    :0fhw
    | formail -I"Тема: [SPECIAL]$MATCH"

    :0:
    $ПО УМОЛЧАНИЮ
}

но в данном случае это ненужное усложнение.

(Возможно, было бы более идиоматично переместить ^Тема: условие для формал рецепт, которому он логически принадлежит, но в любом случае это только касательная.)

Также по касательной, возможно, убедитесь, что ваш ДОРОЖКА правильно в самом начале вашего .procmailrc поэтому вы можете не указывать полный путь к внешним утилитам, таким как формал.

tripleee avatar
флаг ar
Пожалуйста, обратите внимание на краткое обновление блокировки только сейчас. И спасибо за прием.

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

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