4

我有一个 postfix 服务器监听和接收在 mywebsite.com 收到的所有电子邮件现在我想在自定义界面中显示这些 postfix 电子邮件,并且也为每个用户显示

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

因此,为了让用户看到他收到的邮件,我需要创建一个后缀邮件的电子邮件副本,以便 mywebsite(在 django-python 上运行)能够轻松地反映它们。我如何做到这一点。确切地说,这是我的问题,如何将后缀邮件转换为 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 如何理解收到的电子邮件。即..它如何自动找出不同的标题、附件等)。请帮我。

4

3 回答 3

9

你想让 postfix 发送到本地邮箱,然后使用 webmail 系统让人们访问存储的邮件。

不要挂在 postfix 上——它只是一个传输代理——它从一个地方获取消息,并将它们放在另一个地方,它不存储消息。所以 postfix 将通过 SMTP 接收消息,并将它们放入本地邮件文件中。

然后 IMAP 或某些网络邮件系统会将这些邮件显示给您的用户。

如果您希望将邮件集成到您的 web 应用程序中,那么您可能应该运行一个 IMAP 服务器,并使用 python IMAP 库来获取邮件。

于 2009-03-03T18:50:21.293 回答
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 节)。

祝你好运!

于 2009-03-03T19:17:57.623 回答
0

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

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

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

于 2009-03-03T18:35:07.820 回答