def buildnewsletter(book_list): """Routine to send an HTML newsletter """ logger.info('Pulling together the newsletter.') __tmp__file__loc = "tmpicon.jpg" mailer = Mailer( dict(transport=dict(use='smtp', host=config.settings['SMTPSettings']['host'], port=config.settings['SMTPSettings']['port'], username=config.settings['SMTPSettings']['user'], password=config.settings['SMTPSettings'] ['password'], tls=config.settings['SMTPSettings']['startttls']))) try: # Perform jinja message_template_file = config.settings['TEMPLATE_FILE'] message_banner_img = os.path.join( config.settings['TEMPLATE_DIR'], config.settings['TEMPLATE_BANNER_IMG']) message_unknown_img = os.path.join( config.settings['TEMPLATE_DIR'], config.settings['TEMPLATE_NOCOVER_IMG']) message_intropara_file = os.path.join( config.settings['TEMPLATE_DIR'], config.settings['TEMPLATE_INTROPARA']) cd = config.settings['TEMPLATE_DIR'] logger.info(cd) jinja_env = jinja2.Environment(loader=jinja2.FileSystemLoader(cd)) try: with open(message_intropara_file, 'r') as introparafile: message_intropara = introparafile.read().replace('\n', '') logger.info('Loaded newsletter intro paragraph.') except: message_intropara = "<p>New books added.</p>" logger.exception("Couldn't load intro paragraph.") logger.warn('Loading default newsletter intro paragraph.') messagebody = jinja_env.get_template(message_template_file).render( book_list=book_list, intropara_blk=message_intropara) mailer.start() message = Message(author=config.settings['SMTPSettings']['user']) message.subject = config.settings['SMTPSettings']['subject'] message.plain = "This is only exciting if you use an HTML capable email client. Please disregard." message.rich = messagebody message.embed(message_banner_img) flg_unknown_embedded = False for book in book_list: if book["book_cover_id"] != "Unknown.png": book['cover_thumbnail'].save(__tmp__file__loc, "JPEG") message.embed((book["book_cover_id"]), open(__tmp__file__loc)) elif book[ "book_cover_id"] == "Unknown.png" and not flg_unknown_embedded: message.embed(message_unknown_img) flg_unknown_embedded = True for winner in db_operations.get_dl_list(): message.to = winner if config.settings['DevMode']: mailer.send(message) logger.info('DevMode - Sending email to %s', winner) else: mailer.send(message) logger.info('sending email to %s', winner) except: logger.exception('Error sending email.') mailer.stop() logger.info('Completed newsletter routine.') return