Python: Comment puis-je vérifier le courrier électronique avec une boucle sans qu'il y ait un message dans la boîte de réception?

StackOverflow https://stackoverflow.com/questions/5315537

  •  24-10-2019
  •  | 
  •  

Question

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)

Je suis un nouveau débutant dans la programmation de python et le code python ci-dessus est un que j'utilise pour un programme que je veux faire. Quand je lance ce dans un terminal je reçois la réponse que j'ai authentifié mon compte et il affiche le message entre les caractères 139 et 161, qui est ce qui suit dans l'e-mail par exemple:

Ceci est juste un test ...

Il est imprimé dans le terminal. Si je supprime le message dans ma boîte de réception ce sort:

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

Je crois que cela est dû à ce que je n'ai pas de messages dans la boîte de réception. Maintenant ce que je veux faire est que s'il n'y a aucun message à courir encore et encore jusqu'à ce qu'un message apparaît dans ma boîte de réception et faire une action en fonction dans l'attente du message

Était-ce utile?

La solution

Une solution rapide et sale est d'attraper le TypeError. Quelque chose comme ceci:

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

Cela dit, cela pourrait se être améliorée. D'une part, vous pouvez utiliser

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

au lieu de découper le corps de votre message à bits, et se fondant sur le placement exact. Vous pouvez également confirmer que msg[1][0] est le tuple du corps, ou itérer à travers les articles dans msg jusqu'à ce que vous le trouverez.

Vous pouvez également être intéressé par PEP 8 . D'autres sont plus susceptibles d'être en mesure de lire rapidement votre code si vous vous y tenez quand vous le pouvez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top