49 lines
1.5 KiB
Python
49 lines
1.5 KiB
Python
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()
|