48 lines
1.6 KiB
Python
48 lines
1.6 KiB
Python
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) |