¿Procesar el correo electrónico recibido con Python o Django?

Entiendo cómo funciona el envío de correo electrónico a través de Django, pero quiero que los usuarios puedan responder al correo electrónico. Si el correo electrónico que envían (y yo recibo) contiene un mensaje que coincide con una determinada cadena, llamaré a una función.

He hecho algunas búsquedas en Google, pero parece que no hay otra solución que no sea hacer el script yo mismo. Por favor corríjame si hay algo por ahí que pueda hacer esto; de lo contrario, ¿qué podría usar para comenzar a escribir mi propio script para hacer esto?

¡Gracias!

Estamos haciendo algo similar con plone mediante la configuración de postfix para hacer una solicitud HTTP de plone al recibir un correo electrónico a un dominio específico. Esto también debería ser fácilmente posible con django, para que solo tenga que configurar su servidor y escribir una vista en django que reciba el correo electrónico.

Así es como puedes hacerlo:

1) Configure su DNS para que un registro MX para el dominio apunte a su servidor.

2) Configure un alias virtual postfix /etc/postfix/virtual :

 example.com anything django@example.com django-mail-in 

3) y /etc/aliases :

 django-mail-in: "|/usr/local/bin/mta2django.py http://127.0.0.1:8000/mail-inbound" 

4) /usr/local/bin/mta2django.py llama a /usr/local/bin/mta2django.py y envía el correo a la vista de django de mail-inbound . Este mta2django.py debería funcionar:

 #!/usr/bin/python import sys, urllib import os def post_message(url, recipient, message_txt): """ post an email message to the given url """ if not url: print "Invalid url." print "usage: mta2django.py url " sys.exit(64) data = {'mail': message_txt} if recipient and len(recipient) > 0: data ['recipient'] = recipient try: result = urllib.urlopen(url, urllib.urlencode(data)).read() except (IOError,EOFError),e: print "error: could not connect to server",e sys.exit(73) try: exitcode, errormsg = result.split(':') if exitcode != '0': print 'Error %s: %s' % (exitcode, errormsg) sys.exit(int(exitcode)) except ValueError: print 'Unknown error.' sys.exit(69) sys.exit(0) if __name__ == '__main__': # This gets called by the MTA when a new message arrives. # The mail message file gets passed in on the stdin # Get the raw mail message_txt = sys.stdin.read() url = '' if len(sys.argv)>1: url = sys.argv[1] recipient = '' # If mta2django is executed as external command by the MTA, the # environment variable ORIGINAL_RECIPIENT contains the entire # recipient address, before any address rewriting or aliasing recipient = os.environ.get('ORIGINAL_RECIPIENT') if len(sys.argv)>2: recipient = sys.argv[2] post_message(url, recipient, message_txt) 

5) Escriba una vista /mail-inbound django que reciba el correo y haga las cosas que necesita que haga. En la solicitud usted tiene:

  • mail – el mensaje de correo electrónico completo
  • recipient : el destinatario original (útil cuando no detecta una dirección de correo electrónico específica sino todo el dominio / subdominio)

Puede analizar el correo electrónico utilizando el módulo de email python:

 import email msg = email.message_from_string(request.get('mail')) 

Como no soy un experto en postfix, no estoy seguro si editar /etc/postfix/virtual y /etc/aliases es suficiente. Por favor, consulte la documentación de postfix para más detalles.

Utilice Mailgun.

Deberá proporcionar a MailGun una URL a la que se enviaría POST y podrá analizar el mensaje de correo electrónico.

http://documentation.mailgun.net/quickstart.html#receiving-and-parsing-email

Django no proporciona ningún correo electrónico que reciba soporte.

Lamson puede ser una buena alternativa si necesita algo más avanzado que revisar el correo electrónico usando poplib , o algo más pythonic que interactuar con Postfix.