Contestador SMS es un proyecto que pretende crear un sistema de aviso y contestación automática de mensajes recibidos en un correo electrónico.
El funcionamiento se basa en la lectura del correo electrónico cada cierto tiempo y de forma periódica, detectando si han llegado nuevos mensajes.En caso de llagar un nuevo mensaje, la aplicación procesa el mismo para identificar remitente:
Es decir, el sistema contesta esos mensajes con un texto estándar que configura el usuario y avisa al mismo de esa recepción mediante un mensaje de texto.
NOTA: La contestación a un mail normal se realiza empleando el API de Envío HTTP de MMS, ante las dificultades encontradas con el servicio SMTP. En los comentarios puedes encontrar el código en Python de envío de mensaje SMTP con archivo adjunto.
Contestador SMS 1.0
Esta versión del programa funciona mediante la petición de los parámetros de funcionamiento que tiene el usuario:
El usuario previamente a usar este servicio, debe registrar su numero en el API de recepción SMS. De esa forma, entrando al correo tenemos tanto mails normales como mensajes procedentes de recepción.
El programa lo que hace primeramente es una lectura de los mensajes existentes en el inbox, de esa forma toma su puesto de partida, y en las siguientes lecturas se procesan los mensajes nuevos que van entrando en el buzón.
Esta hecho mediante conexión POP3, por lo que en principio debería funcionar sobre cualquier cuenta cuyo servidor soporte este tipo de conexión. En el desarrollo se ha usado gmail como buzón.
Contestador SMS v2.0
La versión 2.0 tiene las mismas funcionalidades que la v1.0, pero cuenta con la ventaja que la carga de datos no se realiza a través de Prompt del sistema sino que se carga a través de un fichero de configuración.
numero de telefono;
clave770;
correo@gmail.com;
clavecorreo;
mensajecontestacion;
ciclolectura;
Es importante dejar el ; del final de línea por lo comentado, es la forma de separar la información deseada (el dato del usuario) del carácter "\n" que introduce readlines() al leer el contenido del fichero.
De esta forma nos libramos de la molestia de tener que escribir todos los datos cada vez que usamos el programa, sino que teniendo en un único lugar ya nos funciona de una forma más cómoda.
Contestador SMS Ejecutable.
Versión ejecutable del contestador que permite hacer uso del proyecto sin necesidad de tener instalado Python en la máquina.
Se basa en la segunda versión desarrollada y para un correcto funcionamiento debe encontrarse en "C:\contestadorsms".
Una vez ejecutad, podremos ver su estado en Administrador de tareas de Windows (ctrl + alt + sup). Para frenar su ejecución simplemente eliminamos el proceso de la tabla.
Es importante señalar que tanto en el arranque como en el funcionamiento, el usuario no se ve molestado por mensajes en su equipo.

Falta realizar la Wiki, un poco de tiempo y estará disponible.
Comentarios
Hola a todos.
Estoy programando el proyecto en Python y en la primera versión se ocupara de la contestación de los mensajes mediante un texto base.
Voy teniendo problemas en la interpretación de los mensajes, hago la lectura y comprobación del mensaje mediante POP3 ya que con SMTP-IMAP al tener que abrir conexiones y sesiones (al menos eso he ido viendo) puede que diera problemas con algunos servidores y sobre todo configuraciones de equipos.
Tengo pensado ir poco a poco integrando más APIs en el mismo, si alguien se anima a participar del desarrollo... invitado está y aprendemos todos con ello.
v1.0: Contestación estándar de los mensajes.(API de envío SMS y recepción SMS)
v1.0.1: Integración con API Copiagenda para identificar el número remitente.
v1.0.2: Crear ejecutable.
v2.0: Usar el API de MMS para enviar imágenes y darle algo más de alegría a las contestaciones.
Se acepta igualmente ideas o sugerencias al respecto... tengo una en mente con Localízame pero tengo que darle todavía una vuelta.
La idea es convertir luego después todo en ejecutable independiente de si se tiene Python o no instalado, he visto algo por Internet pero no se yo si funcionará.
Menuda locura que ha llegado sorprendentemente a buen puerto.
Empece el proyecto sin tener ni idea de Python, pero gracias a los SDKs que viene bien detallado todo, a la información de la página de Python y la multitud de información existente en la red... se puede decir que se ha llegado a buen puerto, si bien no de la forma o con las escalas deseadas.
El primero problema que encontre fue la imposibilidad de poder enviar un mail de respuesta cuando se recibe un correo que es un mail, no procedente del API de recepción SMS. Por más códigos, pruebas realizadas, intentos... no lograba conectar con el servidor smtp del correo. Para salvar este problema y de paso introducir una mejora en el proyecto compensatorio, implemente el envío de un MMS a ese correo como destinatario en el que poder personalizar la imagen a enviar.
Ha habido muchas dudas, se han llegado a soluciones que si bien resuelven el problema pueden resultar no óptimas... así, que si alguien quiere optimizar,mejorar, depurar, usar... bienvenido sea.
Hola a todos.
A ver si alguien puede echarme una mano con el tema del smtp que me esta volviendo loco, no logro hacer la conexión con el servidor de smtp de Gmail.com y me parece realmente raro.
He visto diferentes códigos por Internet para resolver el problema, pero con todos me ha salido el mismo problema de conexión al servior smtp de Gmail. Incluso he activado esta opción en el perfil de la cuenta pero ni con esas.
Os dejo enlaces a los códigos usados:
#!/usr/bin/python
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email import Encoders
import os
gmail_user = "your_email@gmail.com"
gmail_pwd = "your_password"
def mail(to, subject, text, attach):
msg = MIMEMultipart()
msg['From'] = gmail_user
msg['To'] = to
msg['Subject'] = subject
msg.attach(MIMEText(text))
part = MIMEBase('application', 'octet-stream')
part.set_payload(open(attach, 'rb').read())
Encoders.encode_base64(part)
part.add_header('Content-Disposition',
'attachment; filename="%s"' % os.path.basename(attach))
msg.attach(part)
mailServer = smtplib.SMTP("smtp.gmail.com", 587)
mailServer.ehlo()
mailServer.starttls()
mailServer.ehlo()
mailServer.login(gmail_user, gmail_pwd)
mailServer.sendmail(gmail_user, to, msg.as_string())
# Should be mailServer.quit(), but that crashes...
mailServer.close()
mail("some.person@some.address.com",
"Hello from python!",
"This is a email sent with python",
"my_picture.jpg")
Encontrado en: http://kutuma.blogspot.com/2007/08/sending-emails-via-gmail-with-python.html
El problema siempre me aparece en mailServer = smtplib.SMTP("smtp.gmail.com", 587) y ya no sé a que puede deberse, ¿ideas?.
Seguiremos haciendo pruebas a ver si logro salvar ese problemilla.
Tambien he visto que existe una libreria para Python para trabajar directamente sobre Gmail, libgmail , pero igualmente me da problemas en la autenticación contra el servidor.
:-(
Hola
En mi caso ha funcionado el script que has mandado. Solo he tenido que cambiar el usuario, el password, la dirección de destino y el fichero adjunto.
Buenas, ¿qué tal?.
Muchas gracias por la ayuda, la verdad que ya no sé que pensar... seguramente tenga cortado el tráfico smtp bien por el router o el cortafuegos o el propio cortafuegos del sistema operativo.
Para quien quiera modificarlo e integrar ese interfaz de comunicación con Gmail, es mas o menos sencillo... no soy un "guru" de la programación en Python, pero si no me equivoco:
Al inicio del contestador, include gmail
Siendo gmail el fichero de python donde esta el código que deje en el comentario y ha probado el compañero (de nuevo gracias!).
Y en la parte de análisis del contestador, sustituir la línea mms.SendMessage(subject, prueba, contest) por la que hace uso de la función de envío de gmail: mail(to, subject, text, attach), con los campos correspondientes.
De esa forma deberia funcionar enviando un correo a través de Gmail, en lugar de un MMS como hace actualmente.
;-)
Hola a todos.
He estado probando a hacer más cómodo el funcionamiento del Contestador SMS, la cosa es que en lugar de pedirte los datos por Prompt del sistema se haga la carga de los mismos empleando un archivo de texto.
Ha estado emocionante, lo tenía hace un tiempo pero no lo había probado decentemente para ver si realmente estaba correcto.
El caso es que parece funcionar, mediante la lectura del fichero de configuración (un simple archivo txt) y el comando readlines(), voy leyendo cada línea del archivo hasta que este se cierra.
Tenía el problema que al final de la línea se introducía un "\n" o salto de línea, así que después de mucha pelea he alcanzado la solución "óptima".
Cada línea de ese archivo txt tiene un campo de datos del contestador, y finaliza con un ";". Mediante readlines() leo la línea y separo la cadena a partir de ";" como referencia. A la izquierda me queda el dato deseado y a la derecha "\n"... es una forma de escapar de ese carácter que tanta guerra da.
Lo siguiente en mente es probar si es posible realizar un ejecutable que nos permita "independizar" el contestador de tener o no instalado Python... he visto en un blog la forma de hacerlo, aquí podéis verlo... es usando el módulo Py2exe.
Tengo pendiente la Wiki, no me olvido, pero quería hacerla cuando tenga ya superada la parte de ejecutable.
Versión ejecutable del contestador.
Después de un tiempo de no hacer mucho con el código, he podido ponerme y generar el ejecutable que os había comentado.
Para hacerlo hay que instalar el paquete o añadido Py2exe
y una vez que lo tenemos hay que generar un archivo .py para indicarle a ese paquete sobre que archivo debe crear el ejecutable:
# setup.py
from distutils.core import setup
import py2exe
setup(windows=["miaplicacion.py"])
Lo que hace este ejemplo es inidcar a Py2exe que cree el ejecutable de miaplicacion.py. Este paquete mira que import e includes tiene ese archivos, e ir agregando lo necesario para hacer independiente la ejecución completamente de si tenemos o no Python instalado.
La forma de llamarlo: Python setup Py2exe
El resultado es la creación de dos directorio, uno bult y otro llamado dist. El que nos interesa es este segundo, donde está el ejecutable y todo lo necesario para usarlo.
Bien explicadito, e incluso con capturas de pantalla, podéis verlo en:
http://www.fpress.com/revista/num0505/art.htm