将postfix邮件集成到我的(python)webapp中

时间:2009-03-03 18:23:31

标签: python email message postfix-mta

我有一个后缀服务器正在收听mywebsite.com收到的所有电子邮件。现在我想在自定义界面中显示这些后缀电子邮件,每个用户也是如此

要明确的是,mywebsite.com的所有用户都将获得一些邮件地址,例如someguy@mywebsite.com,他们在我的生产机器上接收电子邮件,但他在mywebsite.com的仪表板内置自己的控制台中看到它们。

因此,为了让用户看到他收到的邮件,我需要创建一个postfix邮件的电子邮件副本,以便mywebsite(在django-python上运行)将很容易地反映它们。我如何实现这一目标。确切地说,这是我的问题,如何将postfix邮件转换为python邮件对象(以便我的系统/网站)理解它?

为了清楚起见,我已经编写了伪代码来实现我想要的东西:

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 个答案:

答案 0 :(得分:9)

您希望将postfix传送到本地邮箱,然后使用Webmail系统让人们访问该存储的邮件。

不要挂在postfix上 - 它只是一个转移代理 - 它从一个地方接收消息,并将它们放在其他地方,它不存储消息。 因此,postfix将通过SMTP获取邮件,并将它们放在本地邮件文件中。

然后IMAP或某些网络邮件系统会向用户显示这些消息。

如果您希望将邮件集成到您的webapp中,那么您应该运行IMAP服务器,并使用python IMAP库来获取消息。

答案 1 :(得分:7)

首先,Postfix邮件路由规则可能非常复杂,而您可能首选的解决方案在错误的地方需要大量的技巧。你不想不小心向某些用户显示其他邮件,对吗?其次,虽然Postfix几乎可以做任何事情,但它不应该只是一个MDA(邮件传递代理)。

使用POP3或IMAP服务器(Cyrus IMAPd,Courier等)可以最好地解决您的解决方案。 IMAP服务器可以拥有“超级用户帐户”,可以阅读所有用户的邮件。然后,您的Web应用程序可以连接到用户邮箱并检索标题和主体。

如果您只想显示主题行,则可以使用特殊的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服务器,选择用户邮箱,获取所有消息ID,然后仅提取(希望)主题,并将结果数据附加到主题列表中。

要获取邮件的其他部分,请使用 sess.fetch 更改该行。有关 fetch 的具体语法,请查看RFC 2060(第6.4.5节)。

祝你好运!

答案 2 :(得分:0)

我不确定我是否理解这个问题。

如果您希望远程Web应用程序能够查看用户的邮箱,您可以安装pop或imap服务器并使用邮件客户端(您应该能够找到一个现成的)来阅读电子邮件。或者,您可以使用Python本身附带的相关库来编写查询pop / imap服务器的内容。

如果要将邮件复制到另一台计算机,可以使用procmail并设置操作来执行此操作。可以将Postfix设置为以这种方式调用procmail。