23

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

一些谷歌搜索并没有出现非常有希望的结果。虽然我确实找到了这个:Receive and send emails in python

我必须自己动手吗?如果是这样,我会以比你说的更快的速度发布该应用程序......无论你说什么。

谢谢,吉姆

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

4

3 回答 3

20

有一个名为jutda-helpdesk的应用程序使用 Pythonpoplibimaplib处理传入的电子邮件。您只需要在某个地方拥有一个具有 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获取消息的特定部分,但希望这足以让您继续前进。

于 2009-04-08T19:43:37.613 回答
6

我知道这个问题现在已经很老了,但只是想我会添加以供将来参考,您可能想尝试一下http://cloudmailin.com。我们有很多 django 用户使用该系统,它应该比建议的解决方案简单一点。

于 2011-03-16T16:07:24.777 回答
1

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

通常的做法是拥有单独的电子邮件和 Web 服务器,为此您可能需要研究 Sendmail 或(更好的)Postfix 之类的东西。我认为,对于 POP3,您还需要像 Dovecot 或 Courier 这样的东西。(当然可以让电子邮件服务器在收到电子邮件时通知您的 Web 应用程序,以便它可以对它们进行操作,如果您想要这样做的话。)

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

您绝对可以用 Python 编写一个小型电子邮件服务器,它只接收这些电子邮件并将图像保存到文件系统或数据库或其他任何地方。(可能值得提出一个新问题,关于)但不要让它成为 Django Web 应用程序的一部分;将其保留为自己的单独程序。

于 2009-04-08T16:23:38.813 回答