Foros del Web » Programando para Internet » Python »

Help, envio de emails...

Estas en el tema de Help, envio de emails... en el foro de Python en Foros del Web. Veamos tengo dos funciones, asi rapido..la primera encripta un archivo y llama a la segunda que manda ese archivo por mail..acto seguido mueve los archivos ...
  #1 (permalink)  
Antiguo 25/05/2010, 09:15
Avatar de Nekeniehl  
Fecha de Ingreso: julio-2009
Ubicación: Berlin, Alemania / Granada, España
Mensajes: 132
Antigüedad: 14 años, 9 meses
Puntos: 6
Help, envio de emails...

Veamos tengo dos funciones, asi rapido..la primera encripta un archivo y llama a la segunda que manda ese archivo por mail..acto seguido mueve los archivos a una carpeta Old pero antes comprueba que la segunda funcion no tenga errores y el caso es que siempre devuelve error, alguna mente dispuesta a ayudarme sobre que hago mal?

Código Python:
Ver original
  1. def SendMail():#to, subject, text, files=[],server="localhost"):
  2.     numFiles= os.listdir('~/ReportingTool/Logs/')
  3.     dirFil='~/ReportingTool/Logs/'
  4.     dirOld='~/ReportingTool/Logs/Old/'
  5.     dirEnc='~/ReportingTool/Encfiles/'
  6.     for cont in numFiles:
  7.         if (os.path.isfile(os.path.join(dirFil,cont))):
  8. #           Encrypt all files to send via email
  9.             filin=dirFil+cont
  10.             filout=dirEnc+cont
  11.             Encrypt("xxxxxxxx", filin, filout)
  12.     filout=dirEnc+"25-05-2010.Tuesday"
  13.     if (Send ("[email protected]","Report", "See reports attached.", filout)):
  14.         #    Move files to dir Old
  15.         mvin=os.path.join(dirFil,cont)
  16.         mvout=os.path.join(dirOld,cont)
  17.         shutil.move(mvin,mvout)
  18.  
  19. def Send(to, subject, text, files,server="localhost"):
  20. #    assert type(to)==list
  21. #    assert type(files)==list
  22.     fro = "[email protected]"
  23.  
  24.     msg = MIMEMultipart()
  25.     msg['From'] = fro
  26.     msg['To'] = COMMASPACE.join(to)
  27.     msg['Date'] = formatdate(localtime=True)
  28.     msg['Subject'] = subject
  29.  
  30.     msg.attach( MIMEText(text) )
  31.  
  32.  
  33.     part = MIMEBase('application', "octet-stream")
  34.     part.set_payload( open(files,"rb").read() )
  35.     Encoders.encode_base64(part)
  36.     part.add_header('Content-Disposition', 'attachment; filename="%s"'% os.path.basename(files))
  37.     msg.attach(part)
  38.  
  39.     smtp = smtplib.SMTP(server)
  40.     error=True
  41.     if (smtp.sendmail(fro, to, msg.as_string())):
  42.         error=False;
  43.     smtp.close()
  44.     if (error==False):
  45.         return True
  46.     else:
  47.         return False
  #2 (permalink)  
Antiguo 25/05/2010, 10:25
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Help, envio de emails...

Te recomiendo checar la documentación.

Ademas tratar de usar excepciones para detectar errores. Básicamente tienes la lógica al revés.

Cita:
Iniciado por pydoc
If this method does not throw an exception, it returns a dictionary, with one entry for each recipient that was refused. Each entry contains a tuple of the SMTP error code and the accompanying error message sent by the server.
Traducción:
Si este método no arroja una excepción, entonces devuelve un diccionario, con una o mas entradas que fueron rechazadas. Cada entrada contiene una tupla de código de error de STMP y el respectivo mensaje de error enviado por el servidor.

Si un diccionario esta vació (envió el correo satisfactoriamente entonces no hubo error) de cualquier otra forma hubo error.

Solo para recordarte que un diccionario vació es falso, en cualquier otro caso verdadero.

Solo para simplificarlo.
Código Python:
Ver original
  1. smtp = smtplib.SMTP(server)
  2.     successful=True
  3.     if (smtp.sendmail(fro, to, msg.as_string())):
  4.         successful=False;
  5.     smtp.close()
  6.     return successful

Otra cosa importante, no olvides cerrar los archivos que abres, linea 34
  #3 (permalink)  
Antiguo 25/05/2010, 12:30
Avatar de Nekeniehl  
Fecha de Ingreso: julio-2009
Ubicación: Berlin, Alemania / Granada, España
Mensajes: 132
Antigüedad: 14 años, 9 meses
Puntos: 6
Respuesta: Help, envio de emails...

Gracias por responder =D
He intentado capturar la excepción de esta manera:

Código Python:
Ver original
  1. success=True
  2.     try:
  3.         error=smtp.sendmail(fro, to, msg.as_string())
  4.     except SMTPException:
  5.         success=False
  6.     smtp.close()
Pero sigue igual..no llega a hacer raise de la excepción, esa es la excepción base, al imprimir la variable error me sale vacia lo que da de suponer que es un diccionario vacio ergo lo hace correctamente (?), ¿puede ser debido a la variable server que le paso?
Gracias por las aclaraciones y el fallillo de no cerrar los files xD, es lo que tiene ir con prisas a todos lados jajaja
  #4 (permalink)  
Antiguo 25/05/2010, 20:57
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Help, envio de emails...

Es que una cosa es manejar la excepción y otra los emails que fueron enviados correctamente.

Bueno vamos a poner todo junto:
Código Python:
Ver original
  1. smtp = smtplib.SMTP(server)
  2.     successful=True
  3.     try:
  4.         if (smtp.sendmail(fro, to, msg.as_string())):
  5.             successful=False;
  6.     except SMTPException:
  7.         successful = False
  8.     smtp.close()
  9.     return successful
  #5 (permalink)  
Antiguo 26/05/2010, 02:07
Avatar de Nekeniehl  
Fecha de Ingreso: julio-2009
Ubicación: Berlin, Alemania / Granada, España
Mensajes: 132
Antigüedad: 14 años, 9 meses
Puntos: 6
Respuesta: Help, envio de emails...

Probado y testado con postfix con configuración local y....funciona!!! jajaja, ahora comprobaré si me lo a encriptado correctamente y ya tengo casi terminada mi herramienta de reporte =), aunque seguro que nos vemos antes por aqui jajaja, muchas gracias por tu ayuda =D

Etiquetas: envio, email
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 06:25.