100 lines
7.0 KiB
Python
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)
|