Advertisement
askanton

Забираем всі листи та вкладення з поштового ящика по протоколу pop3

Jun 1st, 2022
1,070
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.24 KB | None | 0 0
  1. import poplib
  2. from email.parser import BytesParser
  3. from email.policy import default
  4. import os
  5.  
  6. f = open("accounts.txt")  # читаємо файл з аккаунтами
  7. accs = f.readlines()
  8. f.close()
  9. i = 0
  10. #print(accs)
  11.  
  12.  
  13. def check(login, passwd):  # описуємо основну функію
  14.     file_path = str(login)
  15.     os.mkdir("{}".format(file_path))  # створюемо папки для пошт
  16.     pop = poplib.POP3('0.0.0.0')  # конектимся до пошти
  17.     pop.user(login)
  18.     pop.pass_(passwd)
  19.     #print(pop.getwelcome())
  20.     stat = pop.stat()
  21.     list_count = int(stat[0])
  22.     print("Total mails: ", list_count)
  23.     mailcount = pop.list()  # рахуємо кількість листів
  24.     if list_count != 0:
  25.         text_count, img_count, pdf_count, html_count = 0, 0, 0, 0
  26.         for k in range(1, list_count):  # перебираємо всі листи
  27.             r = pop.retr(k)
  28.             print(k)
  29.             bp = BytesParser(policy=default).parsebytes(b'\r\n'.join(r[1]))  # парсимо вміст отриманного листа
  30.             for part in bp.walk():  # відділяємо різні типи вмісту
  31.                     if part.get_content_type() == 'text/plain':  # текст
  32.                         message = part.get_content()
  33.                         my_file = open("{}/text_{}.txt".format(file_path, text_count), "a", encoding="utf-8")  # записуемо лист в папку
  34.                         my_file.write(message)
  35.                         text_count = text_count + 1
  36.                         print("text/plain - done")
  37.                     if part.get_content_type() == 'text/html':  # html
  38.                         message = part.get_content()
  39.                         my_file = open("{}/html_{}.html".format(file_path, html_count), "a", encoding="utf-8")  # записуемо лист в папку
  40.                         my_file.write(message)
  41.                         html_count = html_count + 1
  42.                         print("text/html - done")
  43.                     if part.get_content_type() == 'image/jpeg':  # jpeg
  44.                         message = part.get_payload(decode=True)
  45.                         with open("{}/img_{}.jpg".format(file_path, img_count), 'wb') as f:
  46.                             f.write(part.get_payload(decode=True))
  47.                         img_count = img_count + 1
  48.                         print("image/jpeg - done")
  49.                     if part.get_content_type() == 'application/pdf':  # pdf
  50.                         message = part.get_payload(decode=True)
  51.                         with open("{}/pdf_{}.pdf".format(file_path, pdf_count), 'wb') as f:
  52.                             f.write(part.get_payload(decode=True))
  53.                         pdf_count = pdf_count + 1
  54.                         print("application/pdf")
  55.  
  56.     else:
  57.         print("No messages")
  58.  
  59. for acc in accs:  # перебираемо поштові аккаунти
  60.     i = i + 1
  61.     acc = acc.replace('\n', '')
  62.     acc = acc.replace(' ', '')
  63.     acc = acc.split(':')
  64.  
  65.     if len(acc) == 2:  # запускаем перевірку
  66.         print(acc)
  67.         check(acc[0], acc[1])
  68.         print("************************************************************************")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement