我一直在制作一个Python脚本,用于检查自登录后的电子邮件。到目前为止,这是我的代码:
#!/usr/bin/python
import imaplib, getpass
mail = imaplib.IMAP4_SSL('imap.gmail.com')
u = raw_input('Your Gmail Address: ')
p = getpass.getpass()
mail.login(u, p)
mail.select("inbox")
while 1:
r, data = mail.search(None, "ALL")
ids = data[0]
id_list = ids.split()
latest_email_id = id_list[-1]
r, data = mail.fetch(latest_email_id, "(RFC822)")
raw_email = data[0][1]
print raw_email
问题在于,由于while
循环,它会一遍又一遍地显示相同的电子邮件(直到收到新电子邮件)。
我该怎么做:
答案 0 :(得分:1)
所以你基本上想要开发电子邮件监听器 ... 在下面的代码中,我只是下载看不见的电子邮件,以便我们只拥有相关数据。然后,一旦收到电子邮件,我将其标记为“阅读”。所以它的身份不会再次出现:
while 1:
r, search_data = mail.search(None, "UNSEEN") #gets only the unseen emails
ids = data[0]
id_list = ids.split()
latest_email_id = id_list[-1]
r, data = mail.fetch(latest_email_id, "(RFC822)")
raw_email = data[0][1]
print raw_email
mail.store(search_data[0].replace(' ',','),'+FLAGS','\Seen') #marks as read
现在,至少您的代码不会一次又一次地打印相同的电子邮件。在快速收到新电子邮件时,IMAP
通常比POP3
更可靠。不过,这可能需要一些时间。
答案 1 :(得分:0)
我找到了一个解决方案:
list = []
while 1:
mail.select('inbox')
r, data = mail.search(None, "ALL")
ids = data[0]
id_list = ids.split()
latest_email_id = id_list[-1]
r, data = mail.fetch(latest_email_id, "(RFC822)")
raw_email = data[0][1]
if not raw_email in list:
print raw_email
list.append(raw_email)
基本上,它会创建一个名为list
的列表:
list = []
然后,在循环中它大致相同,除了在开头,它再次检查邮箱:
while 1:
mail.select('inbox')
最后,如果print
中raw_email
为not
,则会list
list
,然后将其添加到print
,以便if not raw_email in list:
print raw_email
list.append(raw_email)
不会再次self.addChildViewController(newsPageVC)
newsPageVC.didMove(toParentViewController: self)
:
$ae = escapeshellarg($a);
$be = escapeshellarg($b);
// repeat for the rest of variables
$stream_1 = ssh2_exec($ssh, "/root/Script/Auto_Traces/show_ng_trace.sh $ae $be $ce $de $ee");