Python:如何在没有收件箱中有消息的情况下使用循环检查电子邮件?

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

  •  24-10-2019
  •  | 
  •  

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

我相信这是由于我在收件箱中没有任何消息。现在,我要做的是,如果没有消息一次又一次地运行,直到我的收件箱中显示一条消息并在消息上执行审计操作

有帮助吗?

解决方案

快速而肮脏的解决方案是抓住 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. 。如果您可以在可能的情况下坚持使用其他代码,其他人则更有可能快速阅读您的代码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top