Я хотел бы иметь возможность читать входящую почту от Postfix MTA с помощью сценария оболочки. Сценарий оболочки должен иметь возможность извлекать заголовки, тему, текст, вложения и т. Д., А затем отмечать письмо как прочитанное. Сообщения хранятся в формате Maildir /. Когда сообщение читается в Postfix, оно перемещается из папки Maildir / new в папку Maildir / cur, которую полезно сохранить в качестве резервной копии на случай, если сообщение потребуется повторно обработать.
Я много гуглил, но не нашел ничего полезного, много примеров того, как отправлять почту, но ничего полезного для чтения почты через скрипт. Кажется, что команда mail / mailx разрешает только интерактивный доступ, нет возможности использовать ее через сценарий оболочки. Это должно работать только для одного пользователя, поскольку я использую конфигурацию перехвата для перехвата всей входящей почты в один почтовый ящик для последующей обработки скриптом.
Всегда есть возможность опросить папку Maildir / new для входящих сообщений с помощью cronjob или incron, но мне было бы неплохо использовать возможности управления почтой Postfix, а не вручную управлять файлами msg. Мой сценарий будет локальным для сервера Postfix.
Есть предложения / идеи? Спасибо.
Изменить: Возможно, мне следует упомянуть, что я не ищу помощи со сценарием. Я ищу инструмент командной строки, который может получить доступ к хранилищу Postfix Maildir / msg и читать / делать что-то с msgs и может быть вызван неинтерактивным способом. Другими словами, базовая функциональность почтового инструмента, но не интерактивная.
Я обнаружил следующее:
http://notes-cs.blogspot.in/2013/04/use-command-line-to-read-linux-local.html
Этот человек точно описывает то, что я искал. Чистый гений! Чтобы уловить суть (все ниже приведено по ссылке выше):
Распечатать всю электронную почту в STDOUT:
$ echo "type *" | mail
$ echo "type 1" | mail # print the first email to stdout
$ echo "type 3-5" | mail # print the emails from 3 to 5
Убедитесь, что почтовый ящик пуст (т.е. "Нет почты для [имя пользователя]"):
$ echo q | mail 2>&1 | grep "No mail for [username]"
Очистите почтовый ящик:
$ echo "d *" | mail
$ echo "d 3" | mail # Delete the 3rd email
Сохраните все электронные письма в текстовом файле:
$ echo "s * test.txt" | mail
Сохраняйте электронные письма между диапазоном в файле:
$ echo "s 3-6 test.txt" | mail # this will save email from #3 to #6 to the file test.txt
Прочтите одно письмо из почтового ящика:
$ echo 1 | mail # Read the first mail from mail box:
$ echo 5 | mail # Read the 5th email from mail box:
$ echo 6 | mail
Если нет 6-го мейла из почтового ящика. Это подскажет вам ошибку ниже:
6: Invalid message number
Сообщение об ошибке «Неверный номер сообщения» сообщает вам, что в почтовом ящике нет шестого электронного письма. Если 5-е электронное письмо успешно возвращено. Вы можете рассматривать сообщение об ошибке «Недопустимый номер сообщения» как конец почтового ящика, как и EOF файла. В сочетании с циклом вы можете просматривать все электронные письма в почтовом ящике.
Твоего Google Fu не хватает.
Одно простое решение - стиль sendmail ~/.forward
файл, в котором вы трубите | сообщение прямо в ваш сценарий, еще до того, как оно будет записано в ваш почтовый ящик. Затем ваш скрипт делает свое дело и после этого записывает почтовое сообщение на диск.
Точно так же, но вы получаете немного больше гибкости, когда настроить procmail в качестве агента по доставке почты и настроить ~/.procmailrc
для пересылки сообщений в ваш скрипт.
Альтернативой является установка демона IMAP или POP3 и использование fetchmail
чтобы опрашивать ваш почтовый ящик, читать любые новые сообщения и передавать их вашему сценарию.