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__) mail_config = configuration.config["mail"] def send(article_model): mail = MIMEMultipart() mail['Subject'] = "{} -- {}".format(article_model.source_name, article_model.title) mail['From'] = mail_config["sender"] mail['To'] = mail_config["recipient"] try: msg, files = article_model.mail_info() # this is html except: # Raised by model if article has no associated file logger.info("Skipping mail sending") return 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(mail_config["smtp_server"], mail_config["port"]) except ConnectionRefusedError: logger.error("Server refused connection. Is this an error on your side?") return False smtp.starttls() smtp.login(mail_config["uname"], mail_config["password"]) smtp.sendmail(mail_config["sender"], mail_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)