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)

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

4 года назад
KarapuZZ
27 лет
7 лет в сервисе
Был
год назад

Заявки фрилансеров

Роман
 
21 год
5 лет в сервисе
Был
2 года назад
1 отзыв
4 года назад
Илья
 
32 года
13 лет в сервисе
Был
4 года назад
4 года назад
  • Похожие заказы

  • Необходимо изменить OS Fingerprint на сервере Ubuntu 20.04 с установленным прокси 3proxy, чтобы соединение определялось как MacOS. Требуется возможность смены на другие ОС из сигнатур nmap и одновременная работа с разными ОС. Примеры реализации для MacOS, Android и Windows. Ожидается инструкция по реализации решения.

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

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

    Ищем Back-end разработчика для удаленной работы. Обязанности включают разработку микросервисов, интеграцию с сервисами и взаимодействие с архитектором и менеджером проекта. Необходимы знания одного из языков программирования (JavaScript, Python, Ruby, PHP, Java, C#, C++) и понимание принципов REST API, HTTP, MySQL и работы с git. Условия: свободный график, стабильные выплаты и возможность карьерного роста.

    Закрыт
    4 года назад
  • Требуется разработать ПО под Windows, обеспечивающее фильтрацию HTTPS трафика через локальный прокси. Основные функции включают удаление рекламы из HTML-кода по заданным правилам, обновление до актуальной версии, управление лицензиями через API и установку как стандартного приложения. Обязательное условие — безопасная сделка.

    Закрыт
    4 года назад
  • Требуется разработка скрипта для парсинга сайтов 9gag.com и reddit.com. Собирать данные по 100-500 записей с каждого раздела, с последующим обновлением раз в сутки. Готовый материал должен сохраняться в MySQL БД и включать информацию о источнике, количестве лайков, заголовке, тексте, изображениях/видео и ссылках на посты.

    Завершен
    4 года назад
  • Требуется фронтенд разработчик для создания web application на основе существующего SDK. Ищем специалиста не ниже уровня Middle с опытом работы с JavaScript и React. Опыт в 3D-сфере будет преимуществом. Заработная плата обсуждаемая.

    Закрыт
    4 года назад
  • Требуется разработать функционал на Node.js для рандомизации fingerprint в Chrome с использованием Puppeteer или Selenium. Необходимо подменять параметры, такие как часовой пояс, ОС, WebRTC, геолокация, ядро процессора, оперативная память, языки браузера, шрифты, медиа устройства, а также маскировать canvas hash и webgl.

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

    Закрыт
    4 года назад
  • Ищется специалист для интеграции Yubikey в процесс расшифровки раздела /boot (luks1) на Ubuntu 20.04. Необходимо понять возможность использования пароля и Yubikey challenge response для расшифровки. Требуется детальная инструкция по настройке и внедрению решения, учитывая специфику полнодискового шифрования luks2.

    Закрыт
    4 года назад
  • Требуется разработка кода для Arduino Nano с использованием MCP2515 для работы с CAN B шиной автомобиля Mercedes W211. При нажатии кнопок на руле Arduino должен управлять Bluetooth модулем, а также выводить информацию о треке на приборную панель через CAN. Нужна адаптация существующих библиотек под конкретные требования проекта.

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