Files
2023-04-13 23:55:33 +05:00

100 lines
7.0 KiB
Python

import smtplib # Импортируем библиотеку по работе с SMTP
import os # Функции для работы с операционной системой, не зависящие от используемой операционной системы
# Добавляем необходимые подклассы - MIME-типы
import mimetypes # Импорт класса для обработки неизвестных MIME-типов, базирующихся на расширении файла
from email import encoders # Импортируем энкодер
from email.mime.base import MIMEBase # Общий тип
from email.mime.text import MIMEText # Текст/HTML
from email.mime.image import MIMEImage # Изображения
from email.mime.audio import MIMEAudio # Аудио
from email.mime.multipart import MIMEMultipart # Многокомпонентный объект
import sys # для чтения аргументов
#импорт аргументов
if len(sys.argv)==5:
addr_to = sys.argv[1]
filefold = sys.argv[2]
msgText = sys.argv[3]
msgTheme = sys.argv[4]
print(addr_to)
print(filefold)
else:
sys.exit()
def send_email(addr_to, msg_subj, msg_text, files):
addr_from = "panel@paritet72.ru" # Отправитель
#addr_from = sys.argv[1]
password = "PS4vRgsAvnjGSg" # Пароль
msg = MIMEMultipart() # Создаем сообщение
msg['From'] = addr_from # Адресат
msg['To'] = addr_to # Получатель
msg['Subject'] = msg_subj # Тема сообщения
body = msg_text # Текст сообщения
msg.attach(MIMEText(body, 'html')) # Добавляем в сообщение текст
process_attachement(msg, files)
#======== Этот блок настраивается для каждого почтового провайдера отдельно ===============================================
server = smtplib.SMTP_SSL('smtp.yandex.ru',465) # Создаем объект SMTP
#server.ehlo()
server.set_debuglevel(1)
#server.starttls() # Начинаем шифрованный обмен по TLS
server.login(addr_from, password) # Получаем доступ
# server.auth_plain()
server.send_message(msg) # Отправляем сообщение
server.quit() # Выходим
#==========================================================================================================================
def process_attachement(msg, files): # Функция по обработке списка, добавляемых к сообщению файлов
for f in files:
if os.path.isfile(f): # Если файл существует
attach_file(msg,f) # Добавляем файл к сообщению
elif os.path.exists(f): # Если путь не файл и существует, значит - папка
dir = os.listdir(f) # Получаем список файлов в папке
for file in dir: # Перебираем все файлы и...
print(f+"/"+file)
attach_file(msg,f+"/"+file) # ...добавляем каждый файл к сообщению
def attach_file(msg, filepath): # Функция по добавлению конкретного файла к сообщению
filename = os.path.basename(filepath) # Получаем только имя файла
ctype, encoding = mimetypes.guess_type(filepath) # Определяем тип файла на основе его расширения
if ctype is None or encoding is not None: # Если тип файла не определяется
ctype = 'application/octet-stream' # Будем использовать общий тип
maintype, subtype = ctype.split('/', 1) # Получаем тип и подтип
if maintype == 'text': # Если текстовый файл
with open(filepath) as fp: # Открываем файл для чтения
file = MIMEText(fp.read(), _subtype=subtype) # Используем тип MIMEText
fp.close() # После использования файл обязательно нужно закрыть
elif maintype == 'image': # Если изображение
with open(filepath, 'rb') as fp:
file = MIMEImage(fp.read(), _subtype=subtype)
fp.close()
elif maintype == 'audio': # Если аудио
with open(filepath, 'rb') as fp:
file = MIMEAudio(fp.read(), _subtype=subtype)
fp.close()
else: # Неизвестный тип файла
with open(filepath, 'rb') as fp:
file = MIMEBase(maintype, subtype) # Используем общий MIME-тип
file.set_payload(fp.read()) # Добавляем содержимое общего типа (полезную нагрузку)
fp.close()
encoders.encode_base64(file) # Содержимое должно кодироваться как Base64
file.add_header('Content-Disposition', 'attachment', filename=filename) # Добавляем заголовки
msg.attach(file) # Присоединяем файл к сообщению
# Использование функции send_email # Получатель
files = []
files = [filefold] # Список файлов, если вложений нет, то files=[]
# Если нужно отправить все файлы из заданной папки, нужно указать её
print("here i send mail")
send_email(addr_to, msgTheme, msgText, files)