将电子邮件重定向到Python脚本的最佳方法是什么?

时间:2009-04-25 20:35:44

标签: python django email

我想为我网站的用户提供一项功能,以便在注册时分配一个电子邮件地址(例如firstname.lastname@mydomain.com)但我真的不认为实际支持所有这些电子邮件帐户通常通过网络邮件程序。我也不确定我的webhost是否会很酷。我真正想要的是能够将这封电子邮件无缝集成到该网站的更大系统中,因为它主要用于站内消息,但我们希望允许用户放置实际的电子邮件地址。所以我想做的是在mydomain下有一个包罗万象的帐户,并让这封电子邮件查看收到的邮件,看看它的意图是什么,并在系统中为用户添加一条消息。

所以,问题是:

1)这是正确的方法吗?获得一个允许我随意向我的域分配电子邮件的主机有多贵?我目前正在使用WebFaction的共享主机 2)如果它是一个好的方法,将这个捕获所有帐户的最佳方法是什么到我的python脚本?我已经阅读过.forward,但我不擅长UNIX的东西。一旦我搞清楚了,我如何让脚本进入“Django环境”,这样我就可以使用Django的模型功能向用户添加新消息了?
3)Django可以做些什么来使这更容易吗?
4)Python中是否有任何工具可以帮助我解析电子邮件地址?他们是如何运作的?

4 个答案:

答案 0 :(得分:4)

直接回答你的问题:

1,2)查看WebFaction网站上的this FAQ。它解释了如何轻松地将传入的电子邮件路由到您选择的脚本中。创建电子邮件地址时,您可以不指定用户名,使其成为发送到域的任何内容的全部电子邮件。

3)正如其他人所建议的那样,你可以看看django-messages,但也许Django Plugables有更好的东西。

4)查看email.parser模块,因为它解决了解析电子邮件的大部分可怕部分。

答案 1 :(得分:2)

请参阅my answer一个类似的问题。它有所有基本代码,可以帮助您开始使用Django的电子邮件解析器。

编辑:第二个想法,这是代码:

有一个名为jutda-helpdesk的应用,它使用Python的poplibimaplib来处理传入的电子邮件。您只需拥有一个具有POP3或IMAP访问权限的帐户。

这是根据他们的get_email.py

改编的
def process_mail(mb):
    print "Processing: %s" % q
    if mb.email_box_type == 'pop3':
        if mb.email_box_ssl:
            if not mb.email_box_port: mb.email_box_port = 995
            server = poplib.POP3_SSL(mb.email_box_host, int(mb.email_box_port))
        else:
            if not mb.email_box_port: mb.email_box_port = 110
            server = poplib.POP3(mb.email_box_host, int(mb.email_box_port))
        server.getwelcome()
        server.user(mb.email_box_user)
        server.pass_(mb.email_box_pass)

        messagesInfo = server.list()[1]

        for msg in messagesInfo:
            msgNum = msg.split(" ")[0]
            msgSize = msg.split(" ")[1]
            full_message = "\n".join(server.retr(msgNum)[1])

            # Do something with the message

            server.dele(msgNum)
        server.quit()

    elif mb.email_box_type == 'imap':
        if mb.email_box_ssl:
            if not mb.email_box_port: mb.email_box_port = 993
            server = imaplib.IMAP4_SSL(mb.email_box_host, int(mb.email_box_port))
        else:
            if not mb.email_box_port: mb.email_box_port = 143
            server = imaplib.IMAP4(mb.email_box_host, int(mb.email_box_port))
        server.login(mb.email_box_user, mb.email_box_pass)
        server.select(mb.email_box_imap_folder)
        status, data = server.search(None, 'ALL')
        for num in data[0].split():
            status, data = server.fetch(num, '(RFC822)')
            full_message = data[0][1]

            # Do something with the message

            server.store(num, '+FLAGS', '\\Deleted')
        server.expunge()
        server.close()
        server.logout()

mb只是存储所有邮件服务器信息的对象,其余的应该非常清楚。

您可能需要检查poplibimaplib上的文档以获取邮件的特定部分,但希望这足以让您前进。

答案 2 :(得分:0)

  

但我真的不这么认为   实际支持所有这些是可行的   电子邮件帐户通常通过   网络邮件程序

我认为你的基本假设不正确。你看,大多数'webmail'程序只是后端邮件系统(后缀等)的前端(或客户端)。您需要了解如何设置您的虚拟主机。没有理由不能以编程方式创建这些帐户,然后让他们使用像SquirrelMail或RoundCube这样的普通Webmail界面。例如,我的虚拟主机(bluehost)允许我使用2500个电子邮件帐户 - 我不确定你的电子邮件数量是多少 - 但我可以升级到无限制,每月额外收取几美元。我认为使用内置的电子邮件处理工具是一种更强大的方法。

答案 3 :(得分:0)

您的问题与this question类似。

使用django-messages之类的项目来处理用户之间的消息传递。

如果您想让用户从Django网站外部接收邮件,那么您需要设置一个MTA来处理接收和存储电子邮件,然后像procmail这样将其检索到您的Django消息数据库中。

常见的MTA是postfixeximqmail。基于Python的Python this question

的答案中列出的

您还需要滚动自己的代码,以使Django网站上的每个新用户成为有效的电子邮件收件人,这样他们就不会被MTA拒绝。