经常发送邮件

时间:2019-04-26 18:25:41

标签: python python-3.x

我试图每隔一段时间从python发送一封电子邮件。下一个是我的情况:

我有一个数据库来接收温度,湿度,压力等传感器值。因此数据库经常更新,以我为例,数据每1分钟发送到数据库一次,我试图做的是是当温度超过特定值(例如26°C)时,例如10或20分钟停止发送邮件,并在温度保持在26以上的情况下再发送一封邮件。我设法发送了邮件,但我的情况是温度值高于26°C时不会停止并且不停地发送邮件。

这是代码:

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

致谢。

1 个答案:

答案 0 :(得分:1)

您可以import time进入程序,并在发送电子邮件时保存时间值。然后,您可以添加自从时间保存到if语句以来已经过去十分钟的支票,如下所示:

import time

timestamp = 0
# ... your code

if (float(df['value'][0]) > 26) and (timestamp == 0 or time.time() - timestamp > 600):
    timestamp = time.time()    
    # ... your code

time.time()输出所谓的unix时间,它是自1970年1月1日以来经过的秒数。在if语句的新表达式中,您还要检查是否有600秒以上自从您上次在语句中调用代码以来已过去,您可以更改秒数以适应您的需求。

随时询问是否还有其他问题。

PS:请将您共享的代码限制为必要,这会使问题看起来更友好并且更易于阅读:)