ich habe ein Programm geschrieben, dass mit einer handelsüblichen webcam eine Bewegungserkennung durchführt. Wurde eine Bewegung erkannt, werden die entsprechenden Einzelframes als png auf der Festplatte gespeichert. Diese aufgenommenen Bilder sollen nun in vom Benuzter varriebaren Intervallen als Anhang mit einer Benachrichtigung an eine/mehrere E-Mail Adressen versandt werden. Dazu wird ein eigener Thread gestartet, der sich nur um diese Aufgabe kümmern soll. Der Code dazu sieht bisher wie folgt aus:
Code: Alles auswählen
import time
from threading import Thread
import os
import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
class Mailsync(Thread):
def __init__(self):
Thread.__init__(self)
self.__lt = time.localtime()
self.__datum = str(self.__lt[2]) + "." + str(self.__lt[1]) + "." + str(self.__lt[0])
self.__zeit = str(self.__lt[3]) + "_" + str(self.__lt[4]) + "_" + str(self.__lt[5])
self.__synctime = 60 # User-Setting
self.__lastcheck = time.time()
self.__files = []
self.__recievers = ["[empfänger]"] # User-Setting
self.__directory = "/private/MD/" # User-Setting
self.__path = "C:\Motion Detection\images\\" + str(self.__datum)
def run(self):
while True:
# Aktualisierungszeit
time.sleep(self.__synctime)
# Datein zum Versand in Liste speichern
for file in os.listdir(self.__path):
mtime = os.path.getmtime(self.__path + "\\" + file)
if mtime > self.__lastcheck:
self.__files.append(file)
if len(self.__files) != 0:
COMMASPACE = ", "
msg = MIMEMultipart()
msg["Subject"] = "Webcam Motion Detection - Report"
msg["From"] = "md_report@localhost"
msg["To"] = COMMASPACE.join(self.__recievers)
for file in self.__files:
fileo = open(self.__path + "\\" + file, "rb")
img = MIMEImage(fileo.read())
fileo.close()
msg.attach(img)
self.__files.remove(file)
s = smtplib.SMTP("[absender-mailserver]")
s.login("[absender-login]", "[absender-pw]")
s.sendmail("[emfpänger]", "[absender]", msg.as_string())
s.quit()
print str(time.time()) + ": mail successfully sent!"
self.__lastcheck = time.time()
[absender] steht im produktionsfall dann für den server des "herstellers" der die Mails versendet
Leider funktioniert der Code aber noch nicht vollständig richtig. Denn anstatt im eingestellten Intervall (hier 60 Sekunden) eine E-Mail mit allen Bildern im Ahang zu versenden, wird eine Mail nach der anderen (oft nur mit ein - zwei bildern im ahang) versendet. Könntet ihr mir da bitte noch helfen?
Viele Grüße