Para los que usan Google App Engine, tal vez necesiten alguna vez recibir/leer correos electronicos dirigidos a la aplicación, y simular los mismos durante la fase de desarrollo.
Como lenguaje de programación estoy usando Python (recordar que IMAP no se puede usar desde una aplicación GAE)
Bien, por defecto, la aplicación no recibirá mensajes de correo electronico, para activar este servicio, hay que configurar el archivo app.yaml de la siguiente manera:
En este archivo, también hay que definir cuales son las direcciones de email con las que nuestra aplicación "se mantendrá a la escucha":
Donde appid es el nombre de nuestra aplicación.
La última url /_ah/mail/.+ y la definición de su controlador, es para manejar los restantes correos que no vayan dirigidos a users o a webmaster.
Decir que cada vez que alguien externo, envie un correo a users@appid.appspotmail.com (por ejemplo), el mensaje será enviado a la url /_ah/mail/ de mediante POST.
Bien, ya hemos explicado como asignar controladores de correo a cada cuenta de correo que queramos estar a la escucha, ahora veamos el contenido de los archivos de los controladores, para simplificar, pondré solamente el de un controlador, el de users_mail.py
Solo decir que se define como una aplicación que será llamada cada vez que alguien envíe un correo a users@appid.appspotmail.com, y que en el modelo se usa la propiedad db.TextProperty() para poder almacenar texto de más de 500 caracteres.
Para más información, visitar: la página oficial de la documentación.
Ahora la parte menos documentada, para que podamos simular el envío de correos desde el servidor de desarrollo (en nuestra casa para los menos duchos), tenemos que visitar en nuestro navegador la url:
Y loguearnos como administradores con la cuenta de correo que queramos testear, en este caso:
Despues de loguarnos como administradores, debemos ir a la url:
Y rellenar el mensaje a simular de esta forma o similar:
Una vez enviado el mensaje, podemos ver si todo ha funcionado correctamente.
Como en el controlador de ejemplo hemos definido un modelo llamado message para guardar el cuerpo de los mails recividos, deberemos de consultar este modelo para ver si todo ha funcionado bien.
Para eso visitamos
Y listamos los mensajes de dicho modelo, quedando:
Como lenguaje de programación estoy usando Python (recordar que IMAP no se puede usar desde una aplicación GAE)
Bien, por defecto, la aplicación no recibirá mensajes de correo electronico, para activar este servicio, hay que configurar el archivo app.yaml de la siguiente manera:
Archivo APP.YAML
inbound_services: - mail
En este archivo, también hay que definir cuales son las direcciones de email con las que nuestra aplicación "se mantendrá a la escucha":
- url: /_ah/mail/users@appid\.appspotmail\.com script: libraries/users_mail.py login: admin - url: /_ah/mail/webmaster@appid\.appspotmail\.com script: libraries/webmaster_mail.py login: admin - url: /_ah/mail/.+ script: libraries/others_mail.py login: admin
Donde appid es el nombre de nuestra aplicación.
La última url /_ah/mail/.+ y la definición de su controlador, es para manejar los restantes correos que no vayan dirigidos a users o a webmaster.
Decir que cada vez que alguien externo, envie un correo a users@appid.appspotmail.com (por ejemplo), el mensaje será enviado a la url /_ah/mail/
Bien, ya hemos explicado como asignar controladores de correo a cada cuenta de correo que queramos estar a la escucha, ahora veamos el contenido de los archivos de los controladores, para simplificar, pondré solamente el de un controlador, el de users_mail.py
Archivo users_mail.py
import logging, email from google.appengine.ext import webapp from google.appengine.ext.webapp.mail_handlers import InboundMailHandler from google.appengine.ext.webapp.util import run_wsgi_app from google.appengine.ext import db class message(db.Model): message_body = db.TextProperty() class UsersMail(InboundMailHandler): def receive(self, mail_message): for content_type, pl in mail_message.bodies('text/plain'): db_message = message( message_body = pl.payload.decode('utf-8') ) db_message.put() # Map mail handler to application. application = webapp.WSGIApplication([UsersMail.mapping()], debug=True) def main(): run_wsgi_app(application) if __name__ == "__main__": main()
Solo decir que se define como una aplicación que será llamada cada vez que alguien envíe un correo a users@appid.appspotmail.com, y que en el modelo se usa la propiedad db.TextProperty() para poder almacenar texto de más de 500 caracteres.
Para más información, visitar: la página oficial de la documentación.
Simular la recepción de correos en el servidor de desarrollo de Google App Engine
Ahora la parte menos documentada, para que podamos simular el envío de correos desde el servidor de desarrollo (en nuestra casa para los menos duchos), tenemos que visitar en nuestro navegador la url:
http://localhost:PORT/_ah/loginDonde PORT es el puerto que estemos usando, en mi caso el 8082.
Y loguearnos como administradores con la cuenta de correo que queramos testear, en este caso:
users@appid.appspotmail.comNo olvidar que appid debería ser el nombre de la aplicación.
Despues de loguarnos como administradores, debemos ir a la url:
http://localhost:PORT/_ah/admin/inboundmail
Y rellenar el mensaje a simular de esta forma o similar:
Una vez enviado el mensaje, podemos ver si todo ha funcionado correctamente.
Como en el controlador de ejemplo hemos definido un modelo llamado message para guardar el cuerpo de los mails recividos, deberemos de consultar este modelo para ver si todo ha funcionado bien.
Para eso visitamos
http://localhost:PORT/_ah/admin/datastore
Y listamos los mensajes de dicho modelo, quedando:
Comentarios
Publicar un comentario