Foros del Web » Programando para Internet » Python »

Método getreply() de smtplib se queda bloqueado

Estas en el tema de Método getreply() de smtplib se queda bloqueado en el foro de Python en Foros del Web. Buenas, Estoy iniciandome en esto del python, por motivos de trabajo y, como suele suceder en estos casos, el aprendizaje es a marchas forzadas. Lo ...
  #1 (permalink)  
Antiguo 30/12/2008, 11:17
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 22 años
Puntos: 17
Método getreply() de smtplib se queda bloqueado

Buenas,

Estoy iniciandome en esto del python, por motivos de trabajo y, como suele suceder en estos casos, el aprendizaje es a marchas forzadas.

Lo que me interesa es un pequeño script que envíe correos a través de un determinado servidor SMTP (cosa que no parece muy complicada).

Tengo un código tan sencillo como éste:

Código:
#! /usr/bin/python
import smtplib

smtpserver = "192.168.15.150"
sender = "[email protected]"
to  = "[email protected]"
subject = "Asunto"
text = "Texto de prueba"

msg = "From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n" % (sender, to, subject)
msg = msg + text
server = smtplib.SMTP(smtpserver)
#server.set_debuglevel(1)
server.sendmail(sender, to, msg)
#(code,msg) = server.getreply()
server.quit()
Y funciona perfecto, envía el correo a la dirección de destino mediante el servidor especificado. El problema es que necesito capturar la respuesta del SMPT. Para ello utilizo el método getreply() (el que está comentado en el código. Sin embargo con esta instrucción el script no termina nunca, cuando lo aborto manualmente me devuelve la siguiente traza:

Código:
Traceback (most recent call last):
  File "mail.py", line 15, in <module>
    server.getreply()
  File "/usr/lib/python2.5/smtplib.py", line 352, in getreply
    line = self.file.readline()
  File "/usr/lib/python2.5/socket.py", line 346, in readline
    data = self._sock.recv(self._rbufsize)
KeyboardInterrupt
¿Estoy haciendo algo mal? Por lo que he podido leer al respecto debería funcionar... He probado con un par de servidores SMTP (ambos en máquinas de la red local en la que estoy) ¿Se me pasa algo por alto?

He buscado un poco, pero ando algo perdidillo y no sé muy bien cómo y dónde buscar información al respecto, en todos los ejemplos que he visto la sintasix es la misma.

Gracias y un saludo.
  #2 (permalink)  
Antiguo 30/12/2008, 13:46
 
Fecha de Ingreso: octubre-2004
Ubicación: COLOMBIA
Mensajes: 240
Antigüedad: 20 años, 1 mes
Puntos: 3
Respuesta: Método getreply() de smtplib se queda bloqueado

De lo poco que sé, el módulo smtplib no tiene ese método.
smtplib
__________________
Revista Código Latino
SoloCodigo
  #3 (permalink)  
Antiguo 30/12/2008, 13:58
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 22 años
Puntos: 17
Respuesta: Método getreply() de smtplib se queda bloqueado

Umm, aquí si sale el método:

http://pydoc.org/2.5.1/smtplib.html

Estoy trasteando un poquito con ello, y con algún comando sí que me devuelve la respuesta... voy a ver si saco algo en claro.

Gracias de todos modos!
  #4 (permalink)  
Antiguo 31/12/2008, 03:30
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 22 años
Puntos: 17
Respuesta: Método getreply() de smtplib se queda bloqueado

No he conseguido hacer funcionar el getreply(). Es algo curioso, se menciona en pocos sitios, pero el método parece que existe...

De cualquier manera, ¿Hay alguna forma de recoger la respuesta que da el servidor SMTP después de mandar un mail con el método sendmail() de smtplib?
  #5 (permalink)  
Antiguo 31/12/2008, 06:39
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Método getreply() de smtplib se queda bloqueado

Quizás sea por el tipo de respuesta que devuelve el servidor luego de enviar el mensaje, que quizás no se corresponda con lo que getreply() espera y por lo tanto quizás este método se queda esperando una respuesta adecuada...

De todas formas, por acá se puede ver una descripción que más o menos dice: si sendmail no tira una excepción, todo fue correcto:

http://www.python.org/doc/2.5/lib/SMTP-objects.html


Saludos.
  #6 (permalink)  
Antiguo 01/01/2009, 07:33
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 22 años
Puntos: 17
Respuesta: Método getreply() de smtplib se queda bloqueado

Sí, ya lo he leído. La respuesta es un 250 (de que el correo se ha enviado bien) y luego el string. El tema es que necesito la respuesta, porque en el string que me devuelve el servidor tengo un ID que necesito para hacer el seguimiento del mensaje (ese ID lo genera el MTA)

De hecho con el debuglevel a 1 se ve bien lo que me devuelve (no lo puedo poner ahora, porque no estoy en el trabajo).

Una opción más chapucera sería capturar los mensajes de debug y parsearlos, pero me parecía mucha chapuza.

He encontrado muy poquita información sobre el método getreply y, desde luego, no tengo conocimientos suficientes para meterme a mirar el código de las librerias de SMTP o del manejo de sockets en python!

Pero bueno, mañana volveré a echarle un vistazo a ver si consigo sacar algo en claro, aunque me temo que getreply no va a funcionar luego de mandar un mail...

Muchas gracias!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:03.