[ Foro de Python ]
hola, estoy inmerso en un proyecto y no me acabo de salir con la mía, la idea es enviar un email con un archivo adjunto cada vez que se acciona un pulsador,
El montaje va bien, pero en determinadas condiciones envía la imagen totalmente en negro.
Dejo el código y mi email por si alguien ve el problema y me quiere echar una mano.
[ (emnail eliminado) ]
Muchas gracias.
#!/usr/bin/env python
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders
import os
USERNAME = "username@gmail.com"
PASSWORD = "password"
def sendMail(to, subject, text, files=[]):
assert type(to)==list
assert type(files)==list
msg = MIMEMultipart()
msg['From'] = USERNAME
msg['To'] = COMMASPACE.join(to)
msg['Date'] = formatdate(localtime=True)
msg['Subject'] = subject
msg.attach( MIMEText(text) )
for file in files:
part = MIMEBase('application', "octet-stream")
part.set_payload( open(file,"rb").read() )
Encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="%s"'
% os.path.basename(file))
msg.attach(part)
server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo_or_helo_if_needed()
server.starttls()
server.ehlo_or_helo_if_needed()
server.login(USERNAME,PASSWORD)
server.sendmail(USERNAME, to, msg.as_string())
server.quit()
sendMail( ["*******your_email********@gmail.com"],
"Doorbell notification",
"Someone is ringing the doorbell, picture attached",
["/home/pi/webcam.jpg"] )
La lógica parece correcta. De hecho, si no lo fuera, no funcionaría "a veces". Quizá sea simplemente un problema de temporización: que la imagen o bien no esté disponible o bien esté bloqueada (todavía) porque aún se esté generando. Puedes probar a solucionarlo añadiendo un pequeño retardo (un par de segundos) antes de enviar el correo que utiliza esa imagen.
Por cierto, censuro tu dirección de correo electrónico, para que recibas la menor cantidad de Spam posible. Puedes echar un vistazo al foro cuando quieras para ver si tienes respuesta.
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)