2009-04-08 30 views
21

Me he familiarizado bastante con las capacidades de envío de correo electrónico de django, pero no he visto nada al recibir y procesar correos electrónicos de los usuarios. ¿Esta funcionalidad está disponible?django para enviar Y recibir un correo electrónico?

Algunas búsquedas en Google no han arrojado resultados muy prometedores. Aunque encontré esto: Receive and send emails in python

¿Voy a tener que hacer mi propia cuenta? si es así, publicaré esa aplicación más rápido de lo que puedas decir ... lo que sea que digas.

gracias, Jim

actualización: No estoy tratando de hacer un servidor de correo electrónico, sólo tiene que añadir algunas funciones donde se puede enviar por correo electrónico una imagen para el sitio y tienen el pop-up en su cuenta.

+0

Consulte también esta pregunta: http://stackoverflow.com/questions/640970/email-integration –

Respuesta

17

Hay una aplicación llamada jutda-helpdesk que usa Python's poplib y imaplib para procesar los correos electrónicos entrantes. Solo debe tener una cuenta en algún lugar con acceso POP3 o IMAP.

Esta es una adaptación de su 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 es sólo un objeto para almacenar toda la información del servidor de correo, el resto debe ser bastante clara.

Probablemente necesites consultar los documentos en poplib y imaplib para obtener partes específicas del mensaje, pero espero que esto sea suficiente para ponerte en marcha.

2

Django está realmente pensado como un servidor web (bueno, como un marco que se adapta a un servidor web), no como un servidor de correo electrónico. Supongo que podría poner algún código en una aplicación web de Django que inicie un servidor de correo electrónico, usando el tipo de código que se muestra en esa pregunta a la que se vinculó, pero realmente no lo recomendaría; es un abuso de las capacidades de la programación web dinámica.

La práctica habitual es tener servidores de correo electrónico y web separados, y para eso querrá buscar algo como Sendmail o (mejor aún) Postfix. Para POP3 también necesitarías algo como Dovecot o Courier, creo. (Es ciertamente posible que el servidor de correo electrónico notificar a su aplicación web cuando se reciben mensajes de correo electrónico para que pueda actuar sobre ellos, si eso es lo que quiere hacer.)

EDITAR: en respuesta a sus comentarios: si usted es tratando de hacer (o al menos usar) un servidor de correo electrónico. Un servidor de correo electrónico es simplemente un programa que recibe correos electrónicos (y puede ser capaz de enviarlos también, pero no es necesario).

Definitivamente podría escribir un pequeño servidor de correo electrónico en Python que acaba de recibir estos correos electrónicos y guarda las imágenes en el sistema de archivos o en una base de datos o lo que sea. (Puede valer la pena hacer una nueva pregunta, sobre) Pero no la haga parte de su aplicación web Django; mantenerlo como su propio programa separado.

+1

No estoy tratando de crear un servidor de correo electrónico, solo necesito agregar algunas funciones donde puede enviar una imagen por correo electrónico al sitio y haz que aparezca en tu cuenta. – Jiaaro

5

Sé que esta pregunta ya es bastante antigua, pero pensé que agregaría para referencia futura que tal vez quiera darle una oportunidad a http://cloudmailin.com. Tenemos bastantes usuarios de django que usan el sistema y debería ser un poco más simple que la solución propuesta.

+0

GRACIAS steve, esto es exactamente lo que estaba buscando. –

Cuestiones relacionadas