Найдите исполнителя для вашего проекта прямо сейчас!
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.

from variables import *

import imaplib, os, zipfile, openpyxl, time

from email import message_from_bytes

from email.header import decode_header, make_header

from pathlib import Path

import smtplib

from email.mime.multipart import MIMEMultipart

from email.mime.text import MIMEText

from email.mime.base import MIMEBase

from email import encoders

# Папка загрузки архивов

attachment_dir = str(Path.home() / "Downloads")

SYMVOL = ('<:', '"',="" '="" ',="" '\\',="" '|',="" '?',="" '*')="" <="" p="">

file = 'C:/Users/Karapuz/Desktop/ser/163687_BMW_X5_M1_0151_Маланюк Евро.pdf'

# Функция загрузки файлов

def get_attachments(msg):

global myzip

with zipfile.ZipFile(zip_dir +'.zip', 'w') as myzip:

for part in msg.walk():

if part.get_content_maintype()=='multipart':

continue

if part.get('Content-Disposition') is None:

continue

fileName = part.get_filename()

if bool(fileName):

filePath = os.path.join(attachment_dir, str(make_header(decode_header(fileName))))

with open(filePath,'wb') as f:

f.write(part.get_payload(decode=True))

myzip.write(filePath)

os.remove(filePath)

# Если в сообщении нет прикрепленных файлов - архив не будет сохранен

if len(myzip.infolist()) == 0:

os.remove(zip_dir + '.zip')

# Функция поиска Win кода на сервере

def serach_win_code_in_file(_win_code):

import pdfplumber

filename = file

text = ''

pages = []

with pdfplumber.open(filename) as pdf:

for i, page in enumerate(pdf.pages):

text = text+str(page.extract_text())

pages.append(page)

win_code_in_file = text[(text.find('номер кузова:')) + 14 :(text.find('номер кузова:')) + 31]

if _win_code == win_code_in_file : return True

# Функция отправки сообщения пользователю

def send_message_to_user(email_user):

sender = 'ЛОГИН'

password = 'ПАРОЛЬ'

receiver = email_user

message = MIMEMultipart()

# message.add_header('reply-to', '[email protected]')

message['reply-to'] = data['email_from']

message['From'] = sender

message['To'] = receiver

message['Subject'] = 'Довідка'

body = '''Отримайте Вашу довідку'''

message.attach(MIMEText(body, 'plain'))

pdfname = file

binary_pdf = open(pdfname, 'rb')

payload = MIMEBase('application', 'octate-stream', Name=pdfname)

payload.set_payload((binary_pdf).read())

encoders.encode_base64(payload)

payload.add_header('Content-Decomposition', 'attachment', filename=pdfname)

message.attach(payload)

session = smtplib.SMTP('smtp.gmail.com', 587)

session.starttls()

session.login(sender, password)

text = message.as_string()

session.sendmail(sender, receiver, text)

session.quit()

# Подключение к почте

TYPE_OF_EMAIL = 'imap.' + LOGIN[LOGIN.find('@')+1:]

con = imaplib.IMAP4_SSL(TYPE_OF_EMAIL)

con.login(LOGIN, PASSWORD)

count_of_xlsx = 2

while True:

# Загрузка каждого сообщения

for i in range(1, int(con.select(NAME_OF_CATALOG_ON_MAIL)[1][0].decode('utf-8')) + 1):

result, data = con.fetch(f'{i}', '(RFC822)')

raw = message_from_bytes(data[0][1])

from_user = str(make_header(decode_header(raw['FROM'])))

subject_of_mail = str(make_header(decode_header(raw['Subject'])))

# Проверяем название архива на запрещенные для сохранения символы

for elem in SYMVOL:

if elem in subject_of_mail:

subject_of_mail = subject_of_mail.replace(elem, '')

# Объявляем название архива

zip_dir = os.path.join(attachment_dir, str(subject_of_mail))

win_code = False

# Находим WIN-code машины в теме письма

for elem in subject_of_mail.split(' '):

if len(elem) == 17 and (not 'i' 'o' 'q' in elem.lower()) and elem.isalnum():

win_code = elem.upper()

if serach_win_code_in_file(win_code):

get_attachments(raw)

print('Файл сохранен')

send_message_to_user(from_user[from_user.find('<:from_user.find('>')])

print('Сообщение отправлено')

# Работа с базой данных

file_xlsx = openpyxl.load_workbook(filename = 'data.xlsx')

sheet = file_xlsx['data']

if len(myzip.infolist()) != 0:

while sheet.cell(row=count_of_xlsx, column=1).value is not None:

count_of_xlsx += 1

sheet.cell(row=count_of_xlsx, column=1).value = from_user[from_user.find('<:from_user.find('>')]

file_xlsx.save(filename='data.xlsx')

if win_code:

sheet.cell(row=count_of_xlsx, column=2).value = win_code

file_xlsx.save(filename='data.xlsx')

count_of_xlsx += 1

# Присваиваем сообщению флаг для его дальнейшего удаления (IMAP пометит как удаленное)

# con.store(f'{i}', '+FLAGS', '\\Deleted')

print('В базу данных записано')

con.expunge()

print('All done')

file_xlsx.close()

time.sleep(60)

Программа принимает сообщение, обрабатывает его и в ответ отправляет сообщение, вот нужно сделать чтобы ответное сообщение отправлялось именно как ответ на обрабатываемое сообщение а не как отдельное сообщение

3 года назад
KarapuZZ
26 летУкраина
6 лет в сервисе
Был
6 дней назад
  • Похожие заказы
  • Passive OS Fingerprint смена ОС.Дано Ubuntu 20.04 сервер, на сервере подняты прокси 3proxy.При подключении через прокси с MacOS, OS Fingerprint определяется какLinux 3.11 and never [fuzzy] ()Нужно поменять OS Fingerprint, так что-бы определял соединение как ...

    Закрыт
    3 года назад
  • Добавить в Jitsi Meet функцию: создать подгруппы (аналог в ZOOM сессионный зал. Функция «breakout rooms» позволяет разделить комнату на сессионные залы в Zoom для обсуждения разных тем. При этом число помещений обсуждения и максимальное количество участников ...

    Закрыт
    3 года назад
  • $2000

    На удаленную работу требуется Back-end разработчик Обязанности:[list=1][*]Разрабатывать микросервисы и сопутствующие модели баз данных;[*]Интеграции с различными сервисами и партнерами;[*]Взаимодействие с архитектором проекта и проектным менеджером.[/list]Требуемые навыки : 1. Знания одного из  языков программирования   ( JavaScript ( ...

    Закрыт
    3 года назад
  • Нужно реализовать ПО под Windows, которое будет выполнять функционал фильтрации HTTPS трафика через локальный прокси. Суть фильтрации будет заключаться в том, чтобы вырезать рекламу из HTML кода, посредством правил, например для CSS: ##.sticky-ad ##.sticky-ad-wrapper ##.sticky-top-ad-wrap (Только безопасная сделка) Обязательные требования * ...

    Закрыт
    3 года назад
  • Необходимо сделать скрипт/настроить сервер для парсинга сайтов: 9gag.com/funny и пары других разделов reddit.com/r/funny и пары других разделов Сначала парсим по 100-500 записей с каждого раздела. Потом 1 раз в сутки допаршиваем. Готовый материал должен быть в виде MYSQL БД и ...

    Завершен
    3 года назад
  • Необходимо на node.js написать функционал для использование через selenium или puppeteer подмены для всех параметров формирующихся fingerprint для использования chrome браузера, подмена часового пояса, OC, WebRTC, геолокации на основе IP , ядра процессора , оперативная ...

    Закрыт
    3 года назад
  • Требуется специалист с опытом работы с Logstash, Elastic, Kibana.Задача состоит в добавлении к существующему индеку дополнительных полей и модификация конфига Logstash под эти цели, также создани пошаговой инструкции по установке Logstash, Elastic, Kibana с последующим ...

    Закрыт
    3 года назад
  • Дано: Ubuntu 20.04 с полнодисковым luks2 шифрованием, включая /boot (luks1). Делал по этой инструкции: https://mutschler.eu/linux/install-guides/ubuntu-btrfs/ Цель: Понять есть ли вообще возможность расшифровки раздела /boot при старте системы с помощью пароля + Yubikey challenge response. (Сначала расшифровывается /boot (luks1), потом загружается ...

    Закрыт
    3 года назад
  • Здравствуйте, Нужен человек, который сможет написать код под ардуино для одного проекта. Дано: Mercedes W211 Arduino nano MCP2515 Bluetooth модуль Необходимый минимум: Нужно слушать CAN B шину автомобиля, при нажатии кнопок на руле, ардуино должно сажать на минус выводы Bluetooth ...

    Закрыт
    3 года назад