В настоящее время мои рецепты procmail следующие:
FROM_=`formail -c -x"From "| awk '{ print $1 }'`
SUBJ_=`formail -c -x"Subject:" | sed -e 's/^[ ]*//g' -e 's/[ ]*$//g'`
:0
*^Subject:.*(60)
{
:0 fwh
| formail | (echo "$FROM_"; echo "$SUBJ_";)
:0 fwb
| formail -I ""
:0
myemail/
}
Мой рецепт procmail будет отфильтровывать только те письма, в теме которых есть число "60". После этого formail выполнит извлечение адреса электронной почты отправителя и его темы, прежде чем пересылать его вместе с содержимым в каталог «myemail».
Может ли кто-нибудь помочь мне создать рецепт procmail для фильтрации входящих писем в разные каталоги, если в темах есть несколько "60", разделенных запятыми?
(Например, электронное письмо с темой 6010,6011,6012, .. 6010 попадет в папку 6010, 6011 войдет в 6011 и так далее.)
Цифры в теме - это номера телефонов, их может быть много разных, поэтому перечисление всех возможных совпадений не вариант.
Если ваши почтовые ящики являются каталогами, вы можете перечислить их все в одном действии доставки. Тогда все становится так просто, как
:0
* ^Subject:.*60
`formail -zxSubject: | egrep -o 60[0-9]+ | sed 's%$%/%'`
Скрипт в обратных кавычках выведет что-то вроде 60123456789/
(новая линия) 609876543210/
(новая строка) - столько, сколько телефонных номеров; каждое из них рассматривается как имя папки, и сообщение доставляется во все эти папки.
(Я уверен egrep | sed
может быть преобразован в единый sed
сценарий. Добавление косой черты после каждого имени папки необходимо для того, чтобы Procmail обрабатывал действие доставки как доставку в каталог. Вы не можете доставить в несколько папок mbox одновременно.)
Мой первоначальный ответ следует под чертой.
То, о чем вы спрашиваете, довольно сложно сделать в Procmail. Нет возможности перебирать набор совпадений. Несколько отчаянный обходной путь - собрать совпадения в переменную, а затем INCLUDERC=
в другой файл рецепта, который будет обрабатывать одно значение с начала переменной, затем SWITCHRC=
снова самому себе, пока в переменной остались значения. Это не обязательно должно быть очень сложно, но это определенно хакерское занятие, до такой степени, что вы должны спросить, действительно ли Procmail является подходящим инструментом для работы.
Конечно, есть также вариант перебора; создать последовательность рецептов для обработки каждого возможного шаблона 60xx.
:0c
* ^Subject:.*6000
myinbox/6000/
и т.д. для 6001, 6002. Это предполагает, что у вас их ограниченное количество, или, если вам нужно обрабатывать каждый случай от 00 до 99, возможно, сгенерируйте рецепты с помощью простого скрипта.
perl -e 'printf ("%02i\n", $_) for 0..99' |
while read i; do
cat <<____HERE
:0c
* ^Subject:.*60$i
myinbox/$i/
____HERE
done >60xx.rc