Попытка направить электронную почту на основе совпадения регулярного выражения.
Я знаю, что могу это сделать:
echo | mail -s test1 me-route2
по этому рецепту:
* ^To:.*me-route2\@
:0:
/home/me/folder-route2/afile
Я бы хотел сделать что-то вроде этого:
* ^To:.*me-(route\d)\@
:0:
/home/me/folder-$MATCH/afile
но я получаю:
procmail: Lock failure on "/home/me/folder-/afile.lock"
У вас неправильный порядок пролога и условия. Но кроме того, Procmail не распознает Perlism \d
. (См., Например, Вот для немного истории регулярных выражений и арканов.) Попробуйте вместо этого:
:0:
* ^To:.*me-\/route[0-9]
/home/me/folder-$MATCH/afile
или, если вы действительно хотите убедиться, что за совпадающим выражением сразу следует знак @,
:0:
* ^To:.*me-\/route[0-9]@
* MATCH ?? ^\/route[0-9]
/home/me/folder-$MATCH/afile
С входа To: reallynotme-route2@example.com
, первое условие фиксирует route2@
и второе условие соответствует через route2
чтобы отбросить конечный @
из MATCH
.
Я подозреваю, что файл блокировки не нужен, поэтому второе двоеточие следует удалить, но это зависит от того, что afile
является. Если это обычный mbox-файл Berkely, вам обязательно следует использовать блокировку. Если это папка Maildir, не следует.
Вы также можете подумать о замене ^To:.*me
с участием ^TO_me
- он будет соответствовать Cc:
и другие соответствующие заголовки, а также буквальный To:
заголовок и избегайте соответствия reallynotme
.
Procmail не использует группы захвата, как обычные регулярные выражения, по крайней мере, для MATCH. На странице руководства:
Эта переменная присваивается procmail всякий раз, когда ему предлагается извлечь текст из соответствующего регулярного выражения. Он будет содержать весь текст, соответствующий регулярному выражению после токена `/ '.
Итак, следующее должно работать (непроверено):
* ^To:.*me-\/route\d
MATCH
затем будет содержать все, что соответствует регулярному выражению после \/
, так что "route \ d".
К сожалению, с таким адресом, как me-route2-ab@example.com
, с участием MATCH
будучи "route2". Но это может быть приемлемо для вас.