Вопрос

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

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

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

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

Обновить:Я не пытаюсь создать почтовый сервер, мне просто нужно добавить некоторую функциональность, с помощью которой вы можете отправить изображение по электронной почте на сайт и оно появится в вашей учетной записи.

Это было полезно?

Решение

Есть приложение под названием jutda-служба поддержки который использует Python's 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 чтобы получить конкретные части сообщения, но, надеюсь, этого будет достаточно, чтобы заставить вас двигаться дальше.

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top