2014-02-20 10 views
1

Я создаю приложение, которое должно отправлять и получать электронные письма.Отправить и получить электронную почту в приложении python (без IMAP или POP3)

Однако я не хочу иметь отдельный почтовый сервер (или использовать IMAP и POP3), так как мне нужно создавать/удалять/управлять почтовыми ящиками на лету, без входящих сообщений электронной почты пароли и т.д.

I есть база данных электронной почты на месте, и я могу получать электронные письма с помощью настраиваемого сервера smtpd, заменяя постфикс. Тем не менее, таким образом я не могу отправлять электронные сообщения через постфикс (используя smtplib, подключая через порт 25 к постфиксному и отправляющему сообщения электронной почты)

Любое решение этой проблемы? Как отправлять электронные письма с помощью специального SMTP-сервера? Могу ли я настроить постфикс для ретрансляции всех входящих писем на пользовательский SMTP-сервер, работающий в другом порту, и по-прежнему использовать постфикс на порт 25 для отправки электронной почты?

Спасибо за ваше время

ответ

3

с помощью настраиваемого SMTP-сервер, вы рискуете ненароком создания дыр в безопасности или нарушение протокола SMTP каким-либо образом. С таким большим количеством серверов SMTP (Postfix, exim, sendmail ...), это не похоже на хороший вариант для меня.

Самый простой способ решить эту проблему - использовать Postfix для передачи входящей и исходящей электронной почты. Входящая электронная почта может быть настроена для подключения к приложению, а исходящая электронная почта может быть настроена для доставки Postfix напрямую или через другой сервер.

Таким образом, вместо настраиваемого SMTP-сервера можно использовать приложение, которое может анализировать файлы сообщений, совместимые с RFC822. Это лучше, чем делать то же самое, но с накладными расходами на выполнение протокола SMTP.

Этот подход, вероятно, не будет хорошо масштабироваться, если вам нужно получить большой объем сообщений - каждое сообщение будет fork + выполнять новый процесс. Если это необходимо, хорошим подходом было бы сохранить собственный SMTP-сервер для выполнения этого задания, но пусть Postfix передает ему сообщения - тогда вы выиграете от архитектуры Postfix перед вашим парсером.

Предполагая, что вы следовать подходу конвейера сообщения приложения, все, что вам нужно сделать в Postfix является параметром

  1. Configure Postfix в alias_maps "искать такую ​​карту:

    alias_maps = hash:/etc/aliases, hash:/etc/postfix/app-aliases 
    
  2. Затем настроить карту для сообщений трубы отправленной на каждый адрес в приложение:

    test:   "|/usr/local/bin/your-app" 
    
  3. Как обычно, не забудьте указать $ postalias app-aliases.

Это сделает сообщение, отправленное [email protected] быть передан в /usr/local/bin/your-app, который выступает в качестве электронной почты шлюза для вашего приложения.

+0

Между тем, [это пришло] (http://elspy.sourceforge.net/), это также должно сделать трюк, напрямую получая электронные письма из входящей очереди агента передачи почты. Я проверю обе альтернативы и посмотрю, что лучше. – Isidoro

+1

Это больше похоже на модуль сканера, чем на MDA. Вероятно, вам лучше будет [procmail] (http: //www.procmail.org /) или [maildrop] (http://www.courier-mta.org/maildrop/). –