Я запускаю скрипт, который будет получать электронную почту (imaplib) и отправлять оповещения обратно на мою личную электронную почту с помощью smtplib.Я запускаю его на своем Raspberry Pi 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, если нет непрочитанных писем ??Я попытался вручную установить тему без отметки и пометить все письма как прочитанные после возвращения темы.Не уверен, что происходит, если вы можете помочь, я очень ценю.это сводило меня с ума весь день: /