Domanda

Ho acquistato una certa familiarità con le capacità di invio e-mail di Django, ma io havn't visto nulla al riguardo la ricezione di messaggi di posta elettronica e di elaborazione da parte degli utenti. Questa funzionalità è disponibile?

Qualche ricerche di Google non hanno alzato risultati molto promettenti. Anche se ho trovato questo: ricevere e inviare messaggi di posta elettronica in pitone

Sto per avere a rotolare il mio? se è così, sarò distacco che app velocemente di quanto si può dire ... quello che dici.

Grazie, Jim

Aggiorna :. Non sto cercando di fare un server di posta elettronica, ho solo bisogno di aggiungere alcune funzionalità in cui è possibile inviare un'immagine al sito e lo hanno pop-up nel tuo account

È stato utile?

Soluzione

C'è un app chiamata jutda-helpdesk che utilizza poplib e imaplib di Python per elaborare le email in arrivo. Basta avere un conto da qualche parte con POP3 o IMAP.

Questo è adattato da loro 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 è solo un oggetto per memorizzare tutte le informazioni del server di posta, il resto dovrebbe essere abbastanza chiaro.

Avrete probabilmente bisogno di controllare la documentazione su poplib e imaplib per ottenere specifiche parti del messaggio, ma spero che questo è sufficiente per farti andare.

Altri suggerimenti

So che questa domanda è piuttosto vecchio, ma ora solo pensato che vorrei aggiungere per riferimento futuro che si potrebbe desiderare di dare http://cloudmailin.com un andare. Abbiamo un bel po 'gli utenti Django utilizzano il sistema e dovrebbe essere un po' più semplice della soluzione proposta.

Django è davvero inteso come un web server (o meglio, come un quadro che si inserisce in un server web), non come un server di posta elettronica. Immagino che si potrebbe mettere un po 'di codice in un'applicazione web Django che avvia un server di posta elettronica, utilizzando il tipo di codice mostrato in questa domanda si è collegato al, ma davvero non lo consiglio; si tratta di un abuso delle funzionalità di programmazione web dinamico.

La prassi normale è di avere server di posta elettronica e web separati, e per questo si vorrebbe guardare in qualcosa di simile a Sendmail o (meglio ancora) Postfix. Per POP3 si sarebbe anche bisogno di qualcosa come Dovecot o Courier, credo. (E 'certamente possibile che il server di posta elettronica notificare l'applicazione web quando si ricevono messaggi di posta elettronica in modo che possa agire su di essi, se è questo che si vuole fare.)

Modifica : in risposta ai vostri commenti: sì, si sta tentando di fare (o almeno l'uso) di un server di posta elettronica. Un server di posta elettronica è solo un programma che riceve messaggi di posta elettronica (e potrebbe essere in grado di inviare loro pure, ma non è necessario che).

Si potrebbe sicuramente scrivere un piccolo server di posta elettronica in Python che appena riceve questi messaggi di posta elettronica e salva le immagini al file system o un database o qualsiasi altra cosa. (Potrebbe essere la pena chiedere una nuova domanda, circa) ma non fanno parte della vostra Django App Web; tenerlo come un proprio programma separato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top