django 发送和接收电子邮件?

Posted

技术标签:

【中文标题】django 发送和接收电子邮件?【英文标题】:django to send AND receive email? 【发布时间】:2010-10-18 08:25:30 【问题描述】:

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

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

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

谢谢, 吉姆

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

【问题讨论】:

另请参阅此问题:***.com/questions/640970/email-integration 【参考方案1】:

有一个名为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】:

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

【讨论】:

谢谢史蒂夫,这正是我想要的。【参考方案3】:

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

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

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

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

【讨论】:

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

以上是关于django 发送和接收电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章

Paypal 发送了 IPN 的警告电子邮件

Outlook邮件接收和发送服务器设置

Outlook邮件接收和发送服务器设置

邮件发送和接收限制

Outlook邮件接收和发送服务器设置

如何使用 django-rest-auth 和 Mailgun 从 Django 发送密码重置电子邮件