Как я отметил в указанном выше комментарии, это похоже на плохой способ сделать это. Но, вы должны быть в состоянии использовать что-то вроде:
:0c:
* Whatever condition
/path/to/mbox
:0ahi
| /path/to/perl/script
или, что эквивалентно
:0
* whatever condition
{
:0c:
/path/to/mbox
:0ahi
| /path/to/perl/script
}
Первый рецепт вызовет сообщение, которое будет доставлено в файл MBox, но потому что c
флаг используемая обработка будет продолжена после этого рецепта. Флаг a
в следующем рецепте указывает, что он будет использоваться только в том случае, если предыдущий рецепт был использован и успешно завершен.
Флаг h
в этом рецепте указывает, что только заголовки должны быть отправлены на скрипт perl. Это, вероятно, не повлияет на это, так как вы говорите, что сообщениеполучает сообщение из файла mbox, а не из канала; но уменьшает объем данных, которые необходимо отправить по трубе.
Флаг i
указывает, что procmail не должен жаловаться, если он не может отправить все в скрипт. Так как сценарий, вероятно, не читает со своего стандартного ввода , возможно, что буферы для буферов будут заполняться, вызывая procmail, чтобы получить ошибку записи; хотя это вряд ли произойдет при отправке только заголовков сообщения.
Если вы действительно нужно использовать почту :: семейство Box модулей для обработки сообщений, а не то, что может разобрать сообщение из стандартного ввода , я полагаю, что вы по крайней мере использовать Maildir, а не mbox. Настоящей спецификации для формата mbox нет, и существует много способов интерпретации того, как она должна работать. Различия имеют тенденцию быть тонким, поэтому все может показаться, что оно работает нормально до тех пор, пока вы не получите сообщение , которое происходит, чтобы вызвать несовместимость между различными реализациями (например, с линией, начинающейся с From
). Это даже не попадает в проблемы с блокировкой файлов mbox.
Это может помочь показать рецепт, который у вас есть. Тем более, что вы упоминаете использование несуществующего флага 'C' (вы, вероятно, имели в виду' c', но флаги чувствительны к регистру). Кроме того, почему вам нужно, чтобы скрипт perl читал сообщение из файла mbox, скорее всего, он будет работать намного лучше, просто доставив сообщение в perl-скрипт. – qqx
Я использую модуль MAIL :: BOX для обработки. Он вызывает из почтового ящика MBox. И да, я имею в виду «c» в нижнем регистре – BostonMacOSX
Что сказал @qqx: вам действительно нужно изменить свой скрипт Perl, чтобы прочитать одно сообщение на стандартном входе, а не писать в mbox, а затем снова проанализировать его. – tripleee