[ Foro de Python ]

Enviar correo cada cierto tiempo

26-Apr-2019 19:49
Saul Balderas
1 Respuestas

Hola,

Estoy intentando enviar un correo cada cierto tiempo desde python. Mi situación es la siguiente:

Tengo una base de datos que recibe valores de sensores tales como temperatura, humedad, presión, etc. Por lo cual la base de datos se actualiza cada cierto tiempo, en mi caso se manda datos cada 1 minuto a la base de datos, lo que intento hacer es que cuando la temperatura pase de cierto valor, por ejemplo 26 °C se envié el correo pero se detenga por ejemplo 10 o 20 minutos y vuelva a mandar otro en el caso de que la temperatura se mantenga arriba de 26. He logrado manda el correo, pero mi situación es que no se detiene y manda correos sin detenerse mientras el valor de la temperatura esta arriba de 26 °C.

Este es mi código:


dataSQL = []
sql_conn = MySQLdb.connect('localhost', 'root', 'pass', 'DB')
cursor = sql_conn.cursor()
cursor.execute("SELECT value,timestamp FROM sensorParser where sensor='TC'")
rows = cursor.fetchall()
for row in rows:
    dataSQL.append(list(row))
    labels = ['value','timestamp']
    df = pd.DataFrame.from_records(dataSQL, columns=labels)
    X = df['timestamp']
    Y = df['value'].astype(float)
 
 
    if (float(df['value'][0]) > 26):
        email = 'email1@gmail.com'
        password = 'pass'
        send_to_email = 'email2@gmail.com'
        subject = 'ALERTA!!!! SENSORES'
        message = 'Los valores de las variables criticas han superado el limite'
        file_location = 'C:\\Users\\User\\Desktop\\prograpython\\image.jpg'
 
        msg = MIMEMultipart()
        msg['From'] = email
        msg['To'] = send_to_email
        msg['Subject'] = subject
 
        msg.attach(MIMEText(message, 'plain'))
 
        filename = os.path.basename(file_location)
        attachment = open(file_location, "rb")
        part = MIMEBase('application', 'octet-stream')
        part.set_payload((attachment).read())
        encoders.encode_base64(part)
        part.add_header('Content-Disposition', "attachment; filename= %s" % filename)
 
        msg.attach(part)
 
        server = smtplib.SMTP('smtp.gmail.com', 587)
        server.starttls()
        server.login(email, password)
        text = msg.as_string()
        server.sendmail(email, send_to_email, text)
        server.quit()



Saludos.


26-Apr-2019 20:33
Nacho Cabanes (+44)

¿No puedes guardar en esa misma base de datos, en otra o en un fichero la fecha y hora del envío? Así sólo tienes que comprobar esa fecha antes de un nuevo envío y cancelar el envío si no ha pasado suficiente tiempo






(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.)