Python: Как проверить электронную почту с помощью цикла, чтобы в папке входящих не было сообщений? - PullRequest
1 голос
/ 15 марта 2011
import serial
import imaplib
from time import sleep

IMAP_SERVER='imap.gmail.com'
IMAP_PORT=993
ser= serial.Serial ('/dev/ttyACM0',9600)

M = imaplib.IMAP4_SSL(IMAP_SERVER, IMAP_PORT)
rc, resp = M.login('user@gmail.com', 'password')
print rc, resp

while True: 
    M.select()
    for msg_num in M.search("INBOX", "UNDELETED")[1][0].split():
        msg = M.fetch('1', '(BODY.PEEK[TEXT])') 
        String = msg[1][0][1][139:161]
        print String
        if String == "This is just a test...":
            ser.write('0')
    sleep(1)

Я новичок в программировании на Python, и приведенный выше код на Python используется для программы, которую я хочу сделать.Когда я запускаю это в терминале, я получаю ответ, что я аутентифицировал свою учетную запись, и затем он отображает сообщение между символами 139 и 161, которое является следующим в примере электронной почты:

Это всего лишь тест...

Распечатывается в терминале.Если я удаляю сообщение в своем почтовом ящике, это выходит:

String = msg[1][0][1][139:161]
TypeError: 'NoneType' object is unsubscriptable

Я считаю, что это связано с тем, что у меня нет никаких сообщений в почтовом ящике.Теперь я хочу, чтобы, если нет сообщений, которые можно было бы запускать снова и снова, пока сообщение не появилось в моей папке входящих сообщений, и выполните соответствующее действие, ожидающее сообщения

1 Ответ

0 голосов
/ 15 марта 2011

Быстрое и грязное решение - поймать TypeError. Как то так:

try:
    String = msg[1][0][1][139:161]
except TypeError:
    continue

Тем не менее, это может быть улучшено. Во-первых, вы можете использовать

if 'This is just a test...' in String:
    # ...

вместо того, чтобы разрезать тело сообщения на части и полагаться на точное размещение. Вы также можете подтвердить, что msg[1][0] является кортежем тела, или перебирать элементы в msg, пока не найдете его.

Вам также может быть интересно прочитать PEP 8 . Другие с большей вероятностью смогут быстро прочитать ваш код, если вы будете придерживаться его, когда сможете.

...