Подтвердить что ты не робот

Django отправить и получать электронную почту?

Я хорошо знаком с возможностями отправки электронной почты django, но я ничего не видел о получении и обработке электронных писем от пользователей. Доступна ли эта функциональность?

Несколько поисковых запросов Google не показали очень многообещающих результатов. Хотя я нашел это: Получать и отправлять электронные письма в python

Мне придется сворачивать? если это так, я буду размещать это приложение быстрее, чем вы можете сказать... что бы вы ни говорили.

спасибо, Джим

update. Я не пытаюсь создать почтовый сервер, мне просто нужно добавить некоторые функции, где вы можете отправить изображение по электронной почте на сайт и добавить его в свою учетную запись. p >

4b9b3361

Ответ 1

Там есть приложение под названием 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 - это всего лишь некоторый объект для хранения всей информации почтового сервера, остальное должно быть довольно ясно.

Вероятно, вам нужно будет проверить документы на poplib и imaplib, чтобы получить определенные части сообщения, но, надеюсь, этого достаточно, чтобы вы пошли.

Ответ 2

Я знаю, что этот вопрос довольно старый, но я просто подумал, что добавлю для будущей ссылки, что вы можете дать http://cloudmailin.com a go. У нас есть довольно много пользователей django, использующих систему, и это должно быть немного проще предлагаемого решения.

Ответ 3

Django действительно предназначен как веб-сервер (ну, как структура, которая вписывается в веб-сервер), а не как почтовый сервер. Я полагаю, вы могли бы поместить некоторый код в веб-приложение Django, которое запускает сервер электронной почты, используя код, показанный в этом вопросе, с которым вы связались, но я бы не рекомендовал его; это злоупотребление возможностями динамического веб-программирования.

Обычная практика состоит в том, чтобы иметь отдельные почтовые и веб-серверы, и для этого вы хотели бы посмотреть что-то вроде Sendmail или (еще лучше) Postfix. Думаю, для POP3 вам также понадобится что-то вроде Dovecot или Courier. (Возможно, сервер электронной почты уведомит ваше веб-приложение, когда электронные письма будут получены, чтобы он мог действовать на них, если это то, что вы хотите сделать.)

EDIT: в ответ на ваши комментарии: да, вы пытаетесь создать (или, по крайней мере, использовать) почтовый сервер. Сервер электронной почты - это просто программа, которая получает электронные письма (и может также отправлять их, но вам это не нужно).

Вы можете определенно написать небольшой почтовый сервер в Python, который просто получает эти письма и сохраняет изображения в файловой системе или базе данных или что-то еще. (Возможно, стоит задать новый вопрос, о) Но не делайте его частью своего веб-приложения Django; сохраните его как свою отдельную программу.