我正在尝试使用imaplib提取具有特定条件的电子邮件,但是搜索过滤器无法正常工作……它正在拉回应该过滤掉的结果。 最初,我只是尝试按特定电子邮件帐户中的电子邮件进行过滤,但是我在结果中也看到了其他电子邮件地址的结果?
这是我的代码:
import smtplib
import time
import imaplib
import email
import re
ORG_EMAIL = "@gmail.com"
FROM_EMAIL = "<EMAIL_ACCOUNT>" + ORG_EMAIL
FROM_PWD = "<PASSWORD>"
SMTP_SERVER = "imap.gmail.com"
SMTP_PORT = 993
def readEmail():
try:
mail = imaplib.IMAP4_SSL(SMTP_SERVER)
mail.login(FROM_EMAIL,FROM_PWD)
mail.select('inbox')
type, data = mail.search(None, '(FROM "<SEARCH_EMAIL_ACCOUNT>@gmail.com")')
mail_ids = data[0]
id_list = mail_ids.split()
first_email_id = int(id_list[0])
latest_email_id = int(id_list[-1])
amounts = []
print 'Emails found: ', len(range(latest_email_id,first_email_id-1, -1))
for i in range(latest_email_id,first_email_id-1, -1)[0:5]:
typ, data = mail.fetch(i, '(RFC822)' )
for response_part in data:
if isinstance(response_part, tuple):
msg = email.message_from_string(response_part[1])
print 'TO: ',msg['to'],' ||| FROM: ',msg['from'], ' ||| SUBJECT: ', msg['subject']
if msg.is_multipart():
for payload in msg.get_payload():
text = payload.get_payload()
else:
text = msg.get_payload()
except Exception, e:
print str(e)
这些是5395个结果的前5个结果(根据gmail网络应用的同一搜索,总共应该有85个结果!)
Emails found: 5395
TO: "ME@gmail.com" <ME@gmail.com> ||| FROM: "SEARCH_EMAIL_ACCOUNT@gmail.com" <SEARCH_EMAIL_ACCOUNT@gmail.com> ||| SUBJECT: subject title...
TO: ME <ME@gmail.com> ||| FROM: GitHub <noreply@github.com> ||| SUBJECT: [GitHub] subject title....
TO: ME <ME@gmail.com> ||| FROM: GitHub <support@github.com> ||| SUBJECT: [GitHub] subject title....
TO: ME <ME@gmail.com> ||| FROM: GitHub <noreply@github.com> ||| SUBJECT: [GitHub] subject title....
TO: ME@gmail.com ||| FROM: RANDOM_EMAIL_ACCOUNT@adasd.com.au ||| SUBJECT: Your new service is active
最上面的结果是正确的,并且符合搜索条件,但是其他4个结果甚至远不及符合条件!
我在做什么错了?
编辑: 我只是使用另一个gmail帐户尝试了此操作,一个gmail帐户的收件箱中总共有大约10封电子邮件(我在很早以前就设置好了,但还没有使用它)。该代码适用于该帐户,并使用发件人地址正确过滤掉电子邮件!我无法在我的主要帐户上使用它...
Edit2: 我尝试了很多不同的搜索条件,似乎第一个结果总是正确的,但是之后的结果总是随机的。