Procmail для автоматического создания новых папок для хранения писем от новых отправителей

Я учусь использовать procmail, но на данный момент я даже не уверен, что это правильный инструмент для того, что я пытаюсь сделать.

До сих пор мне удавалось заставить fetchmail извлекать электронные письма из учетной записи Google IMAP и procmail для фильтрации этих писем в локальные папки, которые я ранее создал.

Однако мне интересно, есть ли способ заставить procmail автоматически создавать новую папку локально, когда извлекается электронное письмо от нового отправителя, и сохранять это электронное письмо в этой папке.

До сих пор я нашел только веб-сайт, который описывает возможность автоматического создания procmail папок для списков рассылки, но рецепт представляет собой что-то безумное с использованием символов, значение которых я понятия не имею, кроме того, официальный веб-сайт procmail кажется недоступным.

Пожалуйста, вы можете помочь? Спасибо.


person someuser    schedule 24.05.2018    source источник
comment
На веб-сайте Procmail не так много документации; вы сможете найти справочные страницы на многих других сайтах. Также попробуйте iki.fi/era/procmail/quickref.html   -  person tripleee    schedule 24.05.2018


Ответы (1)


Непонятно, как вы ожидаете, что папка будет называться, и какой формат почтового ящика вы используете; но предполагая, что папки maildir названы конечным адресом электронной почты отправителя, попробуйте

Who=`formail -rtzxTo:`
:0
* ? mkdir -p "$Who"
$Who/

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

Who=`formail -rtzxTo:`
:0:
$Who

Получение formail для создания ответа, а затем извлечение заголовка To: сгенерированного ответа — это стандартный, но несколько неочевидный способ получить только окончание электронной почты для отправителя входного сообщения.

Фрагмент оболочки mkdir -p dir создает dir, если он еще не существует, и в противном случае является безвредным.

person tripleee    schedule 24.05.2018
comment
Спасибо @tripleee за ответ. Я ожидаю, что папки будут называться после имени каждого отправителя. Скажем, sender1 и sender2 (с которыми у меня никогда раньше не было переписки) отправляют электронные письма на мой аккаунт Gmail. Я хотел бы, чтобы fetchmail получал эти электронные письма, а procmail создавал папки sender1/ и sender2/ и распределял электронные письма по этим двум папкам. Я думаю, что формат моих почтовых ящиков mbox; если это так, ваш рецепт отличается? Что вы подразумеваете под терминами электронной почты? - person someuser; 06.06.2018
comment
Если вы видите From: Sender McMailface <[email protected]>, конечная часть электронной почты является машиночитаемой частью [email protected] - person tripleee; 06.06.2018
comment
Обновил ответ вариантом mbox. - person tripleee; 06.06.2018
comment
Вы говорите, что в случае с mbox мне не нужна проверка каталога. Означает ли это, что даже команда mkdir исчезает (как вы ясно показываете), и поэтому в этом рецепте нет строки условия? - person someuser; 06.06.2018
comment
Да, именно. Доставка безоговорочная. - person tripleee; 07.06.2018
comment
Код formail более подробно объясняется в моем ответе на ваш другой вопрос - person tripleee; 20.06.2018