Интегрировать почту с постфиксом в мое (python) веб-приложение - PullRequest
4 голосов
/ 03 марта 2009

У меня есть сервер postfix, который прослушивает и получает все электронные письма, полученные на mywebsite.com Теперь я хочу показать эти электронные письма с постфиксом в настраиваемом интерфейсе, и это также для каждого пользователя

Для ясности всем пользователям mywebsite.com будут предоставлены почтовые адреса, например someguy@mywebsite.com, которые получат электронную почту на моем рабочем компьютере, но увидят их в собственной консоли, встроенной в его панель мониторинга на mywebsite.com.

Таким образом, чтобы пользователь мог видеть полученное им письмо, мне нужно создать почтовую копию почтового постфикса, чтобы mywebsite (работающий на django-python) мог легко их отражать. Как мне этого добиться. Чтобы быть точным, это мой вопрос, как мне преобразовать почту postfix в почтовый объект python (чтобы моя система / веб-сайт) это понимала?

Просто чтобы прояснить, я написал код psuedo для достижения того, чего я хочу:

email_as_python_object = postfix_email_convertor(postfix_email)
attachments_list = email_as_python_object.attachments
body = email_as_python_object.body # be it html or whatever

И, кстати, я попробовал модуль электронной почты по умолчанию, который поставляется с Python, но это не удобно для всех случаев. И даже мне нужно иметь дело с почтовыми вложениями вручную (что я ненавижу). Мне просто нужен простой способ иметь дело с подобными случаями (мне было интересно, как postfix понимает полученное письмо, т. Е. Как он автоматически определяет различные заголовки, вложения и т. Д.). Пожалуйста, помогите мне.

Ответы [ 3 ]

9 голосов
/ 03 марта 2009

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

Не зацикливайтесь на postfix - это всего лишь агент переноса - он берет сообщения из одного места и помещает их в другое место, он не хранит сообщения. Таким образом, postfix будет принимать сообщения через SMTP и помещать их в локальные почтовые файлы.

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

Если вы хотите, чтобы почта была интегрирована в ваше веб-приложение, вам, вероятно, следует запустить сервер IMAP и использовать библиотеки Python IMAP для получения сообщений.

7 голосов
/ 03 марта 2009

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

Ваше решение лучше всего решить с помощью сервера POP3 или IMAP (Cyrus IMAPd, Courier и т. Д.). Серверы IMAP могут иметь «учетные записи суперпользователя», которые могут читать почту всех пользователей. Затем ваше веб-приложение может подключиться к почтовому ящику пользователя и получить заголовки и тексты.

Если вы хотите показать только строку темы, вы можете получить ее с помощью специальной команды IMAP и очень низких накладных расходов. Однако библиотека Python IMAP не самая простая для понимания API. Я приведу пример (не проверено!) На примере, взятом из стандартной библиотеки:

import imaplib

sess = imaplib.IMAP4()
sess.login('superuser', 'password')
# Honor the mailbox syntax of your server!
sess.select('INBOX/Luke') # Or something similar. 
typ, data = sess.search(None, 'ALL') # All Messages.

subjectlines = []
for num in data[0].split():
    typ, msgdata = sess.fetch(num, '(RFC822.SIZE BODY[HEADER.FIELDS (SUBJECT)])')
    subject = msgdata[0][1].lstrip('Subject: ').strip()
    subjectlines.append(subject)

Это регистрирует на сервере IMAP, выбирает почтовый ящик пользователя, выбирает все идентификаторы сообщений, затем выбирает (надеюсь) только сюжетные линии и добавляет полученные данные в список subjectlines .

Чтобы получить другие части почты, измените строку с sess.fetch . Для конкретного синтаксиса fetch посмотрите RFC 2060 (раздел 6.4.5).

Удачи!

0 голосов
/ 03 марта 2009

Я не уверен, что понимаю вопрос.

Если вы хотите, чтобы ваше удаленное веб-приложение могло просматривать почтовые ящики пользователей, вы можете установить сервер pop или imap и использовать почтовый клиент (вы должны найти его с полки) для чтения электронных писем. В качестве альтернативы, вы можете написать что-нибудь для опроса сервера pop / imap, используя соответствующие библиотеки, которые поставляются с самим Python.

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

...