代码之家  ›  专栏  ›  技术社区  ›  Jiaaro

Django发送和接收电子邮件?

  •  21
  • Jiaaro  · 技术社区  · 15 年前

    我已经非常熟悉Django的电子邮件发送功能,但是我没有看到任何关于它接收和处理用户电子邮件的信息。此功能可用吗?

    一些谷歌搜索没有找到非常有希望的结果。尽管我发现了: Receive and send emails in python

    我要自己滚吗?如果是这样的话,我会比你说的更快地发布这个应用程序…不管你说什么。

    谢谢, 吉姆

    更新 :我不是要制作一个电子邮件服务器,我只是需要添加一些功能,您可以通过电子邮件将图像发送到站点,并将其弹出到您的帐户中。

    3 回复  |  直到 15 年前
        1
  •  18
  •   tghw megawac    15 年前

    有一个叫做 jutda-helpdesk 使用python的 poplib imaplib 处理收到的电子邮件。您只需要在某个地方拥有一个具有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 只是一些存储所有邮件服务器信息的对象,其余的应该很清楚。

    您可能需要检查文档 棉絮 IMAPLIB 获取消息的特定部分,但希望这足以让您继续前进。

        2
  •  5
  •   Steve Smith    13 年前

    我知道这个问题现在已经很老了,不过我想补充一下,供将来参考。 http://cloudmailin.com 去吧。我们有相当多的django用户使用该系统,它应该比建议的解决方案简单一点。

        3
  •  2
  •   David Z    15 年前

    Django实际上是一个Web服务器(作为一个适合Web服务器的框架),而不是一个电子邮件服务器。我想您可以将一些代码放入一个启动电子邮件服务器的Django Web应用程序中,使用您链接到的问题中所示的代码,但我真的不推荐这样做;这是对动态Web编程功能的滥用。

    通常的做法是拥有单独的电子邮件和Web服务器,为此,您需要查看sendmail或(更好的是)postfix之类的内容。我想,对于POP3,你还需要一些像多芬科特或信使之类的东西。(当然,当收到电子邮件时,可以让电子邮件服务器通知您的Web应用程序,这样,如果您想这样做,它就可以对它们采取行动。)

    编辑 :回应您的评论:是的,您正在尝试创建(或至少使用)电子邮件服务器。电子邮件服务器只是一个接收电子邮件的程序(也可以发送电子邮件,但您不需要)。

    您一定可以用python编写一个小的电子邮件服务器,它只接收这些电子邮件,并将图像保存到文件系统或数据库或其他任何地方。(可能值得问一个新问题,关于)但不要把它作为你的django网络应用程序的一部分;把它作为自己的独立程序保存。