Прямая электронная почта в локальный файл Maildir без MTA

У меня есть приложение, которому нужно писать электронные письма непосредственно на локальные учетные записи imap. Нет MTA (Postfix, Sendmail и т. д.) между ними, чтобы упростить его обслуживание, и нет уязвимости MTA, о которой нужно беспокоиться, поскольку будет около 100 000 учетных записей IMAP (файлы maildir).

Можно ли писать напрямую в файл Maildir программно, не прибегая к помощи MTA?

До сих пор я смотрел на фемтопочту, но она слишком проста для моих нужд, поскольку предназначена для использования на однопользовательской машине. Также видел некоторые модули Python, которые могли бы это сделать, но не уверен, будет ли Python достаточно быстрым, учитывая, что мы говорим о 100 тысяч учетных записей IMAP здесь.

Планирую сделать это на экземпляре AWS или DO. Любые предложения по архитектуре также будут высоко оценены.


person Sharjeel    schedule 06.03.2017    source источник


Ответы (1)


Большинство IMAP-серверов хорошо модульны и включают в себя агент доставки и/или совместно используют стандартный формат папок, для которого такой инструмент уже существует. В этом сценарии нет необходимости вызывать MTA для каких-либо действий, и, возможно, это сознательное проектное решение (также значительно упрощает системное тестирование сервера IMAP и т. д.!)

mailbox библиотека поддерживает запись в и иное управление папки maildir.

# Untested, based on example in documentation
import mailbox
destination = mailbox.Maildir('/path/to/folder')
destination.add(message)

Я серьезно сомневаюсь, что этот код в любом случае будет привязан к ЦП (запись на диск, как правило, будет узким местом), поэтому скорость языка, вероятно, не будет проблемой (и я не обнаружил, что Python слишком медленный для вещи пользовательского пространства, как правило).

Поскольку вы пометили этот Procmail, способ Procmail сделать это (что, однако, вероятно, излишне, если действительно все вам нужно сделать, это записать в папку maildir):

:0
/path/to/folder/

где косая черта в конце является значимой (если ее оставить, выбирается другой формат доставки — Berkeley, если folder — это обычный файл, собственный формат Procmail на основе каталога, если это каталог).

person tripleee    schedule 06.03.2017
comment
Если у вас серьезно не хватает ЦП, разветвите femtomail.c, чтобы удалить дополнение заголовка Received: и замены глупых опций по умолчанию на путь к папке maildir может показаться простым упражнением, даже если вы не программист на C. - person tripleee; 06.03.2017