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)