2009-04-08 7 views
21

Ho acquisito familiarità con le e-mail che inviano le abilità di django, ma non ho visto nulla a riguardo ricevere ed elaborare le e-mail dagli utenti. Questa funzionalità è disponibile?django per inviare E ricevere e-mail?

Alcune ricerche su google non hanno dato risultati molto promettenti. Anche se ho trovato questo: Receive and send emails in python

Devo tirare il mio? se è così, pubblicherò quell'app più velocemente di quanto tu possa dire ... qualunque cosa tu dica.

grazie, Jim

aggiornamento: 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 nella vostra account.

+0

Vedere anche questa domanda: http://stackoverflow.com/questions/640970/email-integration –

risposta

17

C'è un'app chiamata jutda-helpdesk che utilizza Python e imaplib per elaborare le e-mail in arrivo. Devi solo avere un account da qualche parte con accesso 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.

Probabilmente dovrai controllare i documenti su poplib e imaplib per ottenere parti specifiche del messaggio, ma si spera che questo sia sufficiente per farti andare avanti.

2

Django è davvero inteso come un server web (beh, come un framework che si inserisce in un server web), non come un server di posta elettronica. Suppongo che potresti inserire del codice in un'applicazione web Django che avvia un server di posta elettronica, usando il tipo di codice mostrato nella domanda a cui ti sei collegato, ma non lo consiglierei davvero; è un abuso delle capacità di programmazione web dinamica.

La pratica normale è quella di avere e-mail e server web separati, e per quello si vorrebbe guardare qualcosa come Sendmail o (meglio ancora) Postfix. Per POP3 avresti 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.)

EDIT: in risposta ai vostri commenti: sì sei cercando di rendere (o almeno utilizzare) un server di posta elettronica. Un server di posta elettronica è solo un programma che riceve e-mail (e potrebbe essere in grado di inviarle, ma non è necessario).

Si potrebbe sicuramente scrivere un piccolo server di posta elettronica in Python che riceve queste e-mail e salva le immagini sul filesystem o su un database o altro. (Potrebbe valere la pena di fare una nuova domanda, riguardo) Ma non farne parte della tua app web Django; tenerlo come un programma separato.

+1

Non sto provando a creare un server di posta elettronica, ho solo bisogno di aggiungere alcune funzionalità in cui è possibile inviare via e-mail un'immagine al sito e farlo apparire nel tuo account. – Jiaaro

5

So che questa domanda è piuttosto vecchia ora, ma ho pensato di aggiungere per riferimento futuro che si potrebbe desiderare di dare http://cloudmailin.com a partire. Abbiamo parecchi utenti di Django che usano il sistema e dovrebbe essere un po 'più semplice della soluzione proposta.

+0

GRAZIE steve, questo è esattamente quello che stavo cercando. –

Problemi correlati