Как я могу применить свои фильтры procmail к моему maildir ящику входящих сообщений?

Можно использовать fetchmail и procmail, чтобы сделать это. Procmail может быть настроен для выполнения сценария, который тестирует, если электронное письмо имеет закодированные вложения какой-либо пантомимы (это могло бы быть столь же просто как просто захват файла для заголовка MIME), и затем вызывает munpack, если он имеет.

Procmail может выполнить в значительной степени что-либо, что Вы хотите, таким образом, необходимо смочь заставить его выполнять сценарий PHP или обертку оболочки.

8
30.06.2012, 00:44
4 ответа

Я полагаю, что это будет работать. Необходимо работать formail переформатировать почту и передать его обратно через procmail.

Из каталога Maildir:

cat * | formail -s procmail

1
27.01.2020, 20:13
  • 1
    Это на самом деле работает? Разве это не оставило бы все старые сообщения, где они были? –  cnst 26.02.2013, 22:49

Вы смогли делать это на месте, как это:

$ for m in Mail/{cur,new}/*; do echo $m; procmail <$m; rm $m; done

Необходимо удалить каждую исходную электронную почту впоследствии, или иначе procmail копирует ее.

Это также запишет все как новое. Я не уверен в хорошем способе обработать это.

2
27.01.2020, 20:13
  • 1
    Это казалось бы расточительным на диске io: фильтрация procmail обычно только делается на основе заголовков, но такая передача по каналу заставит целое сообщение быть прочитанным и записанным в диск снова и снова. Кроме того, если procmail исчерпывают память или встречаются с некоторой другой проблемой, Вы все еще безусловно удаляете файл (ай!), который кажется довольно страшным, также. Я сказал бы, что это - абсолютно недопустимое решение насколько maildir идет. –  cnst 26.02.2013, 22:56
  • 2
    Это могло быть инкрементно улучшено путем выполнения procmail < $m && rm $m вместо procmail < $m ; rm $m таким образом, по крайней мере, сообщение не удалено, если procmail перестал работать. –  rrauenza 31.12.2017, 09:15

Кажется, что нет никакого хорошего решения для этого: procmail только, кажется, принимает почтовый вход от stdin, который ограничивает maildir приложения.

Я столкнулся с аналогичной ситуацией, и лучшее решение, которые соответствуют моим потребностям, просто копировало то, что я хотел procmail чтобы сделать, но что это совершенно определенно не может сделать с моим собственным небольшим сценарием, который должен быть достаточным, если у Вас только есть одно или два простых правила, что необходимо заботиться о:

cd ~/Maildir/
sh -c 'for i in `egrep -l "^Delivered-To: perforce@freebsd.org" cur/*`; \
    do mv $i .FreeBSD.perforce/$i; done'

Это не оптимально, также, но по крайней мере это не должно страдать от бесполезного IO и потенциальных проблем данных потерь.

0
27.01.2020, 20:13

Если вы используете MUTT, вы можете сдать электронную почту через ProCmail, а также удалить оригинал с вашего почтового ящика с помощью команды ключей что-то подобное:

Muttrc:

macro index y '<enter-command>unset wait_key<enter><tag-prefix><pipe-entry>/usr/bin/procmail /home/user/.procmailrc<enter><tag-prefix><delete-message><enter-command>set wait_key<enter>'

macro pager y '<enter-command>unset wait_key<enter><pipe-entry>/usr/bin/procmail /home/user/.procmailrc<enter><delete-message><enter-command>set wait_key<enter>'

нашел на https://mikeburnscoder.wordpress.com/2011/06/12/One-big-mutt-inbox-filtered-after-faffact-ubsing-procmail/

2
27.01.2020, 20:13

Теги

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