我试图每隔一段时间从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()
致谢。
答案 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:请将您共享的代码限制为必要,这会使问题看起来更友好并且更易于阅读:)