Calificación:
  • 1 voto(s) - 5 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Enviar correo cada cierto tiempo Python
#1
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 mantega 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:


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.
Responder
#2
Hola, si tu código está siempre corriendo y no es una tarea programada (cron), entonces podés usar la función time.sleep() para detener el código por 10 o 20 minutos, o el tiempo que quieras.

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)