django для отправки и получения электронной почты?

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

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

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

спасибо Джим

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


person Jiaaro    schedule 08.04.2009    source источник
comment
См. Также этот вопрос: stackoverflow.com/questions/640970/email-integration   -  person Van Gale    schedule 09.04.2009


Ответы (3)


Существует приложение под названием jutda-helpdesk, которое использует poplib и imaplib Python для обработки входящих писем. Вам просто нужно иметь где-нибудь учетную запись с доступом по протоколу 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, чтобы получить определенные части сообщения, но, надеюсь, этого будет достаточно, чтобы вы начали.

person tghw    schedule 08.04.2009

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

person Steve Smith    schedule 16.03.2011
comment
СПАСИБО, Стив, это именно то, что я искал. - person David Parmenter; 23.02.2013

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

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

РЕДАКТИРОВАТЬ: в ответ на ваши комментарии: да, вы пытаетесь создать (или хотя бы использовать) почтовый сервер. Почтовый сервер - это просто программа, которая получает электронные письма (и может также отправлять их, но вам это не нужно).

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

person David Z    schedule 08.04.2009
comment
Я не пытаюсь создать почтовый сервер, мне просто нужно добавить некоторые функции, с помощью которых вы можете отправить изображение по электронной почте на сайт, и оно появится в вашей учетной записи. - person Jiaaro; 09.04.2009