【问题标题】:mails send if condition is true using python code如果条件为真,则使用 python 代码发送邮件
【发布时间】:2019-02-18 22:33:41
【问题描述】:

我们设置树莓派来测量服务器室温,并使用 python 脚本以"Temp: 24.0 C Humidity: 67.0 %"(每 2 秒更新一次)格式将输出保存在文本文件中。

现在我正在寻找 python 代码来从文本文件中读取温度值(例如 24.0),如果条件为真,例如(Temp>35.0),则向我发送电子邮件,否则什么也不做并退出。

我是 python 新手,所以请帮帮我,我们已经编写了电子邮件代码及其工作,只需在下面的代码中启用上述条件即可。

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
fromaddr = "sender@gmail.com"
toaddr = "recipient@gmail.com"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Alert: Server Room  " 
body = "Server room current temprature is : "
msg.attach(MIMEText(body, 'plain'))
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(fromaddr, "password")
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()

此脚本将使用cron 选项卡运行。

【问题讨论】:

  • 读取文件,然后用Humidity分割行。首先将其拆分为space,从列表中获取temp值,将其转换为(int),然后根据需要使用它。
  • 如果你只是学习 Python,你应该专注于当前支持和推荐的语言版本,即 Python 3。版本 2 原定于今年早些时候结束,尽管它在呼吸器上花了几年时间来帮助那些已经在旧版本上进行了大量投资的人。

标签: python python-2.7 smtp


【解决方案1】:

我想这样的事情会做:

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText


def send_email(temperature):
    fromaddr = "sender@gmail.com"
    toaddr = "recipient@gmail.com"
    msg = MIMEMultipart()
    msg['From'] = fromaddr
    msg['To'] = toaddr
    msg['Subject'] = "Alert: Server Room  "
    body = "Server room current temprature is : " + temperature
    msg.attach(MIMEText(body, 'plain'))
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.starttls()
    server.login(fromaddr, "password")
    text = msg.as_string()
    server.sendmail(fromaddr, toaddr, text)
    server.quit()


f = open("temp_log.txt", "r")
content = f.read()
temp = content.split(' ')[1]
if float(temp) > 35:
    send_email(temp)

【讨论】:

  • 那么请随意验证答案。
【解决方案2】:

首先看起来,但完整可靠的解决方案相当难以实施。您要求的代码可能如下所示:

with open ('temp.txt', 'r',  encoding='utf-8') as temp:
 for line in temp:
       try: 
           temperature = float(line.split()[1])
           if temperature > 35.0: 
                 #SENDEMAIL 
           else: 
               pass
       except: 
          pass

这里的temp.txt 是来自您的覆盆子的文件。

你需要担心的:

  1. 实时读取文件。
  2. 您应该制定一个逻辑 - 每次阅读 应该读取文件的新部分。对于旧部分,您已经发送了 电子邮件。否则,您的邮箱将被大量电子邮件淹没。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 2013-03-19
    • 1970-01-01
    相关资源
    最近更新 更多