如何让我的电子邮件每封电子邮件只显示一次?
How can I make my email show only one time per email?
我一直在制作一个 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
循环,它会一遍又一遍地显示相同的电子邮件(直到收到新的电子邮件)。
如何制作:
- 只显示一次收到的电子邮件,直到收到新的电子邮件
- 只显示一次新的
- 永远重复
所以您基本上想要开发一个 电子邮件侦听器 ...
在下面的代码中,我将只下载看不见的电子邮件,这样我们就有了相关数据。然后,一旦提取了一封电子邮件,我将其标记为 'read',这样它的 ID 就不会再出现了:
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
更可靠。不过,这可能需要一些时间。
我找到了解决方案:
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')
然后,最后,如果list
中的not
,它会print
raw_email
,然后将其添加到list
所以它不会再被 print
ed:
if not raw_email in list:
print raw_email
list.append(raw_email)
我一直在制作一个 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
循环,它会一遍又一遍地显示相同的电子邮件(直到收到新的电子邮件)。
如何制作:
- 只显示一次收到的电子邮件,直到收到新的电子邮件
- 只显示一次新的
- 永远重复
所以您基本上想要开发一个 电子邮件侦听器 ... 在下面的代码中,我将只下载看不见的电子邮件,这样我们就有了相关数据。然后,一旦提取了一封电子邮件,我将其标记为 'read',这样它的 ID 就不会再出现了:
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
更可靠。不过,这可能需要一些时间。
我找到了解决方案:
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')
然后,最后,如果list
中的not
,它会print
raw_email
,然后将其添加到list
所以它不会再被 print
ed:
if not raw_email in list:
print raw_email
list.append(raw_email)