python - smtplib 不必要地重复发送
问题描述
我正在运行一个脚本,它将获取电子邮件(imaplib)并使用 smtplib 将警报发送回我的个人电子邮件。我在我的树莓派 24/7 上运行它,所以当我不在家时,我想检查程序是否仍然运行良好。
以下是功能:
def get_alert():
global subject
user = alert_email
password = alert_email_password
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login(user, password)
mail.list()
mail.select('inbox')
result, data = mail.uid('search', None, 'UNSEEN')
i = len(data[0].split())
for x in range(i):
latest_email_uid = data[0].split()[x]
result, email_data = mail.uid('fetch', latest_email_uid, '(RFC822)')
raw_email = email_data[0][1]
raw_email_string = raw_email.decode('utf-8')
email_message = email.message_from_string(raw_email_string)
subject = str(email.header.make_header(email.header.decode_header(email_message['Subject'])))
print(subject)
return subject
mail.logout()
def send_alert(subj, msg):
server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()
server.login(alert_email, alert_email_password)
message = 'Subject: {}\n\n{}'.format(subj, msg)
server.sendmail(from_addr=alert_email, to_addrs=personal_email, msg=message)
server.quit()
这是循环:
while True:
get_alert()
if subject == 'check': # check that program is still running
send_alert(subj='still running', msg='still running')
if subject == ...
因此,它会完美地收到“检查”电子邮件,并且只打印一次。然而,每个循环每次运行时都会向我发送“仍在运行”,尽管电子邮件被标记为已读并且没有更多未读电子邮件。如果没有未读邮件,主题不应该是 None 吗?我尝试手动将主题设置为无,并在返回主题后将所有电子邮件标记为已读。不知道发生了什么,如果您能帮助我,我将不胜感激。这让我整天发疯:/
解决方案
推荐阅读
- google-cloud-platform - 使用内部 IP 创建 gcloud compute config-ssh?
- reactjs - React.js:状态数组没有正确更新(数组只有最新的元素)
- websocket - 在 jupyter notebook 中使用 websocket 抓取实时数据
- python - 如何在python中删除空格之前的值
- android - Retrofit 2 GET 请求返回 html 而不是 JSON
- ios - iOs拒绝播放lottie动画(内有示例文件)
- javascript - 如何使用 javascript 获取 Instagram 个人资料照片?
- c++builder - TChart 编辑器面板无法打开
- unix - 在 unix 中打印 SQL 查询
- c - 如何使用 doxygen 中的静态数组索引说明符函数参数正确记录 C 数组?