Обработка / сортировка почты из файла почтового ящика?

perl -0ne 'print sort /(#+[^#]*)/g' file.txt
  • perl -0 смазывая весь файл
  • /(....) /g сопоставить и извлечь записи
  • печать сортировки ... отсортировать и распечатать их
1
16.01.2017, 01:32
2 ответа

Метод formail -s задокументирован с демонстрационным скриптом на странице руководства procmail ; найдите эту фразу:

Procmail также может быть вызван для постобработки уже заполненного системного почтового ящика.

Вы также можете найти это в http://www.iki.fi/era/procmail/mini-faq.html#split

Если ваш почтовый ящик не является отдельным файлом Berkeley mbox, скорее всего, вы есть каталог, в котором каждый файл представляет собой отдельное сообщение. В этом случае вы можете просто обработать его с помощью

for f in folder/*; do
    procmail -options <"$f"
    # maybe rm "$f" to remove the original after processing completes
done

В качестве примера того, как фильтровать по отправителю, простой рецепт будет примерно таким, как

# If your mailbox destination is maildir, no locking is required
:0:  # so you could lose the second colon here, and in subsequent examples
* ^From:.*\<alice@example\.com\>
alice

:0:
* ^From:.*\<bob@example\.net\>
bob

и т. Д. Это проверяет заголовок «От:», который обычно подразумевают под «отправителем», хотя есть еще два часто используемых поля (отправитель конверта, который обычно находится в Return-Path: , и фактический Отправитель: заголовок , который является необязательным, но часто заполняется отправляющим программным обеспечением, когда заголовок От: не является фактическим отправителем).

Точно так же, чтобы классифицировать по Subject: , просто укажите регулярное выражение, которое соответствует темам, которые вы хотите захватить.

:0:
* ^Subject: *((Fwd?|Re): *)*\[gunk]
gunk-list

найдет сообщения с заголовками «Тема», содержащими метку [gunk] , которой может предшествовать пробел и / или Re: и / или Fw: и / или Fwd: .

3
27.01.2020, 23:16

Предполагая, что ваш файл почтового ящика находится в формате mbox, вы можете использовать утилита formail , которая поставляется с procmail, для запуска команды для каждого письма с параметром -s , чтобы сообщить ему, что ввод - это почтовый ящик, а не просто отдельное письмо.Эта команда может быть procmail , если вы хотите применить свои правила procmail, или любой другой командой, которая принимает почту на стандартный ввод и делает с ней все, что захочет.

formail -s procmail <Mboxrd && mv Mboxrd Mboxrd.done

Другой подход - загрузить почтовый ящик в Mutt и применить некоторые макросы. Это имеет то преимущество, что оно не зависит от формата почтового ящика, но имеет недостаток, заключающийся в том, что макросы mutt могут быть загадочными (хотя не обязательно более загадочными, чем правила procmail). Еще одно преимущество использования mutt заключается в том, что он может перемещать по одному письму за раз, поэтому, если оно прервано на полпути, оно может возобновиться с того места, где оно было остановлено.

2
27.01.2020, 23:16

Теги

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