import smtplib from pathlib import Path from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email.mime.text import MIMEText from email.utils import COMMASPACE, formatdate from email import encoders def send_mail(send_from, send_to, subject, message, files=[], server="localhost", username='', password='', use_tls=True): """Compose and send email with provided info and attachments. Args: send_from (str): from name send_to (list[str]): to name(s) subject (str): message title message (str): message body files (list[str]): list of file paths to be attached to email server (str): mail server host name username (str): server auth username password (str): server auth password use_tls (bool): use TLS mode """ msg = MIMEMultipart() msg['From'] = send_from msg['To'] = send_to msg['Date'] = formatdate(localtime=True) msg['Subject'] = subject msg.attach(MIMEText(message)) for path in files: part = MIMEBase('application', "octet-stream") with open(path, 'rb') as file: part.set_payload(file.read()) encoders.encode_base64(part) part.add_header('Content-Disposition', 'attachment; filename={}'.format(Path(path).name)) msg.attach(part) smtp = smtplib.SMTP(server) if use_tls: smtp.starttls() smtp.login(username, password) smtp.sendmail(send_from, send_to.split(', '), msg.as_string()) smtp.quit()