Я пишу скрипт, который читает электронные письма, а затем что-то отвечает на основе заголовка. Он проверяет входящие через определенный промежуток времени, а затем отвечает на любые электронные письма в почтовом ящике. В конце он перемещает все прочитанные письма в удаленную папку:
import time
import sys
import imaplib
import smtplib
import getpass
import email
import email.header
import datetime
EMAIL_ACCOUNT = "YOUR_EMAIL_ACCOUNT"
PW = "YOUR_PASSWORD"
EMAIL_FOLDER = "INBOX"
def process_mailbox(M):
#try to log in to the mail server with your credentials
try:
rv, data = M.login(EMAIL_ACCOUNT, PW)
print(rv, data)
except imaplib.IMAP4.error: #except an error and exit
print ("LOGIN FAILED!")
sys.exit(1)
#set the mail server for reading mails
rv, data = M.select(EMAIL_FOLDER)
print(rv, data)
rv, data = M.search(None, "ALL")
# !!-----------------------------------------------------
#here rv always return "OK" therefore the next if clause
#also is always false although it should be True
if rv != 'OK': #
print("No messages found, when i tried at", datetime.datetime.now())
return
for num in data[0].split():
rv, data = Mailbox.fetch(num, '(RFC822)') #returns tuple fetch(message_set, message parts)
if rv != 'OK': #if rv (assigned above) is OK print an error message and return
print("ERROR getting message", num)
return
msg = email.message_from_bytes(data[0][1])
#decode the header and make a readable header
hdr = email.header.make_header(email.header.decode_header(msg['Subject']))
subject = str(hdr) #convert the header to a string
for num in data[0].split(): #for all the mail in the directory
box.store(num, '+FLAGS', '\\Deleted') #flag them as deleted
box.expunge() #and delete them all
Mailbox.close()
Mailbox.logout()
while True:
print("Processing mailbox...\n")
Mailbox = imaplib.IMAP4_SSL('imap.gmail.com')
process_mailbox(Mailbox)
time.sleep(10)
Я где-то нашел код if rv != "OK":
, но он, кажется, не работает правильно (больше?), Поскольку rv всегда в порядке, независимо от того, есть ли электронные письма во входящей почте.
Я попытался просмотреть документацию IMAP, но не нашел аргументов для search
, которые могли бы оценить состояние.
Как правильно проверить, является ли (в этом случае) входной почтовый ящик пустым?
Заранее спасибо за помощь!