2013-08-26 3 views
0

Я нахожусь в установке Red Hat. Что я бегу в том, что:PROCMAIL :: Как получить скрипт perl для выполнения ПОСЛЕ того, как почта доставлена ​​в MBox

  1. Perl-скрипт выглядит в почтовый ящик с помощью модулей искать сообщение # 0 или delieved почту, но это еще не там.

  2. Если я делаю КОПИЮ почты с использованием флага C, я до сих пор получаю тот же ответ, что он не доставляет его в почтовый ящик.

Так что мне нужно знать, это рецепт procmail, который доставляет его в почтовый ящик, а затем запускает скрипт для обработки доставленного сообщения.

Благодаря Роб

+1

Это может помочь показать рецепт, который у вас есть. Тем более, что вы упоминаете использование несуществующего флага 'C' (вы, вероятно, имели в виду' c', но флаги чувствительны к регистру). Кроме того, почему вам нужно, чтобы скрипт perl читал сообщение из файла mbox, скорее всего, он будет работать намного лучше, просто доставив сообщение в perl-скрипт. – qqx

+0

Я использую модуль MAIL :: BOX для обработки. Он вызывает из почтового ящика MBox. И да, я имею в виду «c» в нижнем регистре – BostonMacOSX

+0

Что сказал @qqx: вам действительно нужно изменить свой скрипт Perl, чтобы прочитать одно сообщение на стандартном входе, а не писать в mbox, а затем снова проанализировать его. – tripleee

ответ

3

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

: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.

+0

Я редактировал вопрос, чтобы включить альтернативу с фигурными скобками, которая ИМХО более идиоматична. В противном случае я бы разместил его как комментарий, но здесь вы не можете правильно форматировать код. – tripleee

+1

@tripleee Ваша альтернатива была ** не ** эквивалентна. Это было бы эквивалентно использованию флага 'A' ​​во втором рецепте в моем оригинале. Но поскольку я вместо этого использовал 'a', который должен быть перенесен в вашу версию. Я отредактировал его, чтобы это отразить. – qqx

-1

Так что я смог придумать простой, но, вероятно, не лучший ответ.Поскольку у меня есть контроль над отправкой писем, я решил удалить блокировку процесса, и он работал нормально.

Таким образом, без второго двоеточия и опции «c» теперь он запускает скрипт и может видеть электронное письмо в почтовом ящике.

Ух ... какая боль ... два дня потрачено на простое решение.

+1

Удаление блокировки звучит как ужасное решение. Файлы Mbox очень уязвимы для одновременных авторов, поэтому при работе с ними всегда следует блокировать. Даже если у вас есть полный контроль над доставкой сообщений, вы можете быть уверены, что что-то не изменится позже? – qqx

+0

, но если я не могу запустить скрипт perl, ПОСЛЕ того, как он пишет в Mbox, это единственное решение, которое у меня есть. – BostonMacOSX