示例#1
0
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