smtplib повторять отправлять без необходимости - PullRequest
0 голосов
/ 03 мая 2019

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

...