我有一个postfix服务器监听和接收mywebsite.com收到的所有电子邮件现在我想在自定义界面中显示这些postfix电子邮件,对每个用户也是如此
为了清楚起见,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如何理解收到的电子邮件.即..它如何自动计算出不同的标题,附件等...).请帮我.
您希望将postfix传递到本地邮箱,然后使用Webmail系统让人们访问该存储的邮件.
不要挂在postfix上 - 它只是一个转移代理 - 它从一个地方接收消息,并将它们放在其他地方,它不存储消息.因此,postfix将通过SMTP获取邮件,并将它们放在本地邮件文件中.
然后IMAP或某些网络邮件系统会向用户显示这些消息.
如果您希望将邮件集成到您的webapp中,那么您应该运行IMAP服务器,并使用python IMAP库来获取消息.
首先,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更改该行.对于具体的语法取看看RFC 2060(第6.4.5节).
祝好运!