import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.application import MIMEApplication import os import logging import configuration logger = logging.getLogger(__name__) config = configuration.main_config["MAIL"] def send(article_model): mail = MIMEMultipart() mail['Subject'] = "{} -- {}".format(article_model.source_name, article_model.title) mail['From'] = config["sender"] mail['To'] = config["recipient"] msg, files = article_model.mail_info() # this is html content = MIMEText(msg, "html") mail.attach(content) for path in files: with open(path, 'rb') as file: part = MIMEApplication(file.read(), "pdf") # encoders.encode_base64(part) part.add_header('Content-Disposition', 'attachment', filename=os.path.basename(path)) mail.attach(part) try: try: smtp = smtplib.SMTP(config["smtp_server"], config["port"]) except ConnectionRefusedError: logger.error("Server refused connection. Is this an error on your side?") return False smtp.starttls() smtp.login(config["uname"], config["password"]) smtp.sendmail(config["sender"], config["recipient"], mail.as_string()) smtp.quit() logger.info("Mail successfully sent.") except smtplib.SMTPException as e: logger.error("Could not send mail for article {}".format(article_model)) logger.info(e)