Я использую сценарий main.py (который зависит от другого сценария: functions.py и txt-файла для учетных данных), но сценарий не работает: ошибка: не может использовать строковый шаблон в байтовоподобном объекте (список содержит байты id_list)
Main.py
import email
import imaplib
from bs4 import BeautifulSoup
from functions import array_from_csv
from functions import get_imap_server
from functions import parse_uid
def move_and_print_junk(login):
try:
user = login[0]
password = login[1]
imap_server = get_imap_server(user)
client = imaplib.IMAP4_SSL(imap_server)
client.login(user, password)
client.select("junk")
# get email ids
_, data = client.search(None, 'ALL')
mail_ids = data[0]
id_list = mail_ids.split()
id_list.reverse()
# iterate over ids, fetch messages and print them
for id in id_list:
client.select(mailbox='junk', readonly=False)
resp, data = client.fetch(id, "(UID)")
msg_uid = parse_uid(data[0])
result = client.uid('COPY', msg_uid, 'inbox')
if result[0] == 'OK':
mov, data = client.uid('STORE', msg_uid, '+FLAGS', '(\Deleted)')
client.expunge()
client.select("inbox")
_, data = client.search(None, '(UNSEEN)')
mail_ids = data[0]
id_list = mail_ids.split()
id_list.reverse()
# iterate over ids, fetch messages and print them
for id in id_list:
resp, data = client.fetch(id, "(RFC822)")
email_body = data[0][1]
mail = email.message_from_string(email_body)
try:
soup = BeautifulSoup(mail.get_payload()[0].get_payload(), 'html.parser')
print(soup.get_text())
except:
soup = BeautifulSoup(mail.get_payload(), 'html.parser')
print(soup.get_text())
client.logout()
except Exception as error:
print('\033[1;31mACCOUNT: {} ERROR: \033[1;m'.format(login[0]) + str(error))
else:
print('\033[1;32m\nACCOUNT {} is DONE!\n\033[1;m'.format(account[0]))
login = array_from_csv('accounts')
print("\n{} accounts to process\n".format(len(login)))
print("Processing Begins:\n")
for account in login:
move_and_print_junk(account)
Funtions.py
import csv
import re
import sys
pattern_uid = re.compile('\d+ \(UID (?P<uid>\d+)\)')
def parse_uid(data):
match = pattern_uid.match(data)
return match.group('uid')
def array_from_csv(filename): # function that reads data from csv files
with open('{}.txt'.format(filename), 'rU') as f: # open file
reader = csv.reader(f, delimiter=",") # create reader object
read_raw = list(reader) # read raw data
data = read_raw # store raw data
result = [] # create list object to properly format data
for row_index in range(len(data)):
result.append([])
for index in range(len(data[row_index])):
result[row_index].append(data[row_index][index])
return result
def get_imap_server(email):
if 'outlook' in email or 'hotmail' in email or 'windowslive' in email:
imap_server = 'imap-mail.outlook.com'
elif 'gmail' in email:
imap_server = 'imap.gmail.com'
else:
print("Error: email {} is not Google or Microsoft (not supported)".format(email))
sys.exit()
return imap_server
Account.txt
myemail@hotmail.fr, mypassword
Ошибка:
ошибка: невозможно использовать строковый шаблон для байтовоподобных объект (список, содержащий байты - id_list)