Отправка письма почтой с вложениями через Питон

После запуска офисной телефонии, решил ввести своеобразный «контроль качества». Своего рода ОТК, для определения качества общения отвечающих на звонки сотрудников. Так  как звонков относительно много, и слушать все не представляется возможным, хотя в идеальном мире все должно обстоять именно так, было решено слушать хотя бы выборочные записи звонков. Так как под капотом у нашей АТС —  Asterisk, которая аккуратно записывает звонки и кладет их в определенную папку с waw разрешением то дело было за малым автоматизировать отправку пяти выборочных записей на почту нужным людям. Кстати  все это дело будет происходить на «любимой» мною ОСи Windows 10.

Итак накидаем по быстрому простой скрипт:

# -*- coding: utf-8 -*-
import os, random
import datetime
from datetime import timedelta
from os import path

import smtplib
from os.path import basename
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
from email.utils import COMMASPACE, formatdate

now = datetime.datetime.now()
yesterday = '{:%Y.%m.}{}'.format(now, now.day - 1) # Вчерашний день

currentDay = now.strftime("%Y%m%d") # Текущая дата
# Полный путь до каталга с записями. имеет в своем наименовании часть текущей даты
folderPath= 'N:/callrecords/autorecords' + '/' + currentDay + '/'

# Сохраняем названия файлов в массив
files = [f for f in os.listdir(folderPath)]

# Сохраняем все в подмножество, для исключения дублирующих записей
basket = set()
while len(basket) < 5:
basket.add(random.choice(files))

 

fromaddr = 'ваша почта'
toaddr = ['******@mail.ru', '********@mail.ru', '*********@mail.ru']
subject = 'АТС COMPANY'
text = '5 случайных звонков на дату ' + yesterday

def send_mail(send_from, send_to, subject, text, files=None):
    # assert isinstance(send_to, list)

    msg = MIMEMultipart()
    msg['From'] = send_from
    msg['To'] = COMMASPACE.join(send_to)
    msg['Date'] = formatdate(localtime=True)
    msg['Subject'] = subject
    msg.attach(MIMEText(text))

    for f in basket or []:
    with open(folderPath + '' + f, "rb") as fil:
    part = MIMEApplication(
    fil.read(),
    Name=basename(f)
    )
    # After the file is closed
    part['Content-Disposition'] = 'attachment; filename="%s"' % basename(f)
    msg.attach(part)

    smtp = smtplib.SMTP('smtp.gmail.com', 587)
    smtp.ehlo()
    smtp.starttls()
    smtp.login(fromaddr, "ваш_пароль")
    smtp.sendmail(send_from, send_to, msg.as_string().encode('utf-8'))
    smtp.close()

send_mail(fromaddr, toaddr, subject, text)

Думаю из текста кода все итак понятно.

Сканируем каталог при помощи os.listdir, выбираем случайные при помощи random.choice(), хотя думаю можно было просто обойтись random.sample() — во втором случае можно было упростить код убрав подмножества.

Ну и собственно самое интересное  и сложное что пришлось реализовать это отправку письма через smtp. Я решил использовать gmail, однако имейте ввиду, что в этом случае обязательно отключить проверку на ненадежные источники. Сделать это можно перейдя по ссылке,  и отключив галочку.

Вот собственно и все, далее создаем bat-файл и регламентным заданием определяем с какой периодичностью и в какое время будут посылаться письма. Так легко и просто мы настроили прослушивание звонков.

Соль всей этой истории такова, что сам факт того, что сотрудники знают, что их звонки записываются и более того, что их кто то еще может прослушать, да еще  и наказать за несоответствующее общение с клиентом, уже наводит порядок в умах людей.

Вам также может понравиться

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Яндекс.Метрика