def send_email(msg): to = [msg.to] kwargs = {'headers': {'X-EmailHub-UUID': msg.uuid}} if msg.body_html: args = [msg.subject, msg.body_text, msg.from_email, to] email = EmailMultiAlternatives(*args, **kwargs) email.attach_alternative(msg.body_html, 'text/html') else: args = [msg.subject, msg.from_email, to] email = CreateEmailMessage(*args, **kwargs) if msg.is_draft: msg.is_draft = False if msg.is_error: msg.send_retries += 1 max_retries = emailhub_settings.SEND_MAX_RETRIES if msg.send_retries > max_retries: msg.is_error = True msg.is_sent = False msg.send_error_message = 'Max retries reached ({})'.format(max_retries) log.debug('Not seding email (max retry of {} reached)'.format( emailhub_settings.SEND_MAX_RETRIES)) else: email.debug = True try: email.send() msg.is_error = False msg.is_sent = True msg.date_sent = datetime.now() log.debug('EMAIL SENT > "{}" to {}'.format( six.text_type(msg.subject), msg.to)) except SMTPDataError as e: code, error = e msg.send_error_code = e.smtp_code msg.send_error_message = e.smtp_error msg.is_error = True msg.is_sent = False msg.date_sent = None log.debug('EMAIL SMTP ERROR > "{}" to {} ({})'.format( six.text_type(msg.subject), msg.to, msg)) log.error(six.text_type(e)) except Exception as e: msg.send_error_message = e.message msg.is_error = True msg.is_sent = False msg.date_sent = None log.debug('EMAIL ERROR > "{}" to {} ({})'.format( six.text_type(msg.subject), msg.to, msg)) log.error(six.text_type(e)) msg.save() return msg