Procmail: найти письмо, отправленное с одного адреса и на один адрес?

Добавляя к другим ответам, вы также можете попробовать перенаправление ввода вместо cat

echo $(<my_file.txt)

или

echo `<my_file.txt`

$() и `` выполнить то же самое, они запускаются команды внутри их области действия и передают вывод в оболочку, как если бы он был введен пользователем. Единственная разница между ними состоит в том, что $() может быть рекурсивным, а `` не может быть рекурсивным.

1
28.10.2016, 22:33
1 ответ

Это возможно, хотя для этого требуются некоторые довольно малоизвестные функции Procmail, и, конечно же, вам нужно понимать, чего вы добиваетесь.

:0
*   ^From:[     ]*\/[^  ].*
* $ ^To:[   ]*$\MATCH
{ ... actions ... }

Оператор захвата \ / собирает соответствующую строку в специальную переменную MATCH . На следующей строке мы ищем ту же строку в заголовке To: . Где $ MATCH содержит захваченную строку, $ \ MATCH содержит регулярное выражение, в котором любые специальные символы регулярного выражения в строке были экранированы, чтобы соответствовать буквально. В рецепте требуется модификатор $ , чтобы разрешить интерполяцию переменных Procmail в регулярное выражение.

Используется обычный [] * (пробел или табуляция, ноль или более) для пропуска пробелов после двоеточия, затем захватывается все, начиная с первого непробельного символа.

На практике это означает, что заголовки From: и To: должны иметь идентичное содержимое. Если отправитель вводит другое «настоящее имя» (которое технически является просто комментарием), этот рецепт не будет соответствовать. Например,

From: Myself <me@example.net>
To: Everyone <me@example.net>

Здесь адрес электронной почты идентичен, но все поле отличается. Если вам нужно справиться с этим сценарием, возможно, измените регулярное выражение, чтобы оно соответствовало первым < перед \ / , но это, очевидно, будет зависеть от точных строк, которые вам нужно сопоставить; есть много возможных вариантов.

0
28.01.2020, 01:08

Теги

Похожие вопросы