Send the message.

        If we have PLAIN and HTML versions, send a multipart alternative
        MIME message, else send whichever we do have.

        If we have neither, raise NoContentError

        Arguments:
        - `sender`: str
        - `to`: list
        - `subject`: str
        - `plain`: str
        - `html`: str
        - `attach`: str or iterable of str
        - `replyto`: str

        Return: None
        Exceptions: NoContentError

def send(self, sender, to, subject, plain=None, html=None, cc=None, bcc=None,
             attach=None, replyto=None):
        """
        Send the message.

        If we have PLAIN and HTML versions, send a multipart alternative
        MIME message, else send whichever we do have.

        If we have neither, raise NoContentError

        Arguments:
        - `sender`: str
        - `to`: list
        - `subject`: str
        - `plain`: str
        - `html`: str
        - `attach`: str or iterable of str
        - `replyto`: str

        Return: None
        Exceptions: NoContentError
        """
        headers = {}
        if attach:
            raise NotImplementedError('Attachments not implemented for Django yet!')
        if replyto:
            headers['Reply-To'] = replyto

        self.sanity_check(sender, to, subject, plain=plain, html=html,
                          cc=cc, bcc=bcc)

        if not cc:
            cc = []
        if not bcc:
            bcc = []

        # This comes straight from the docs at
        # https://docs.djangoproject.com/en/dev/topics/email/
        from django.core.mail import EmailMultiAlternatives

        if not plain:
            plain = ''

        msg = EmailMultiAlternatives(u(subject), u(plain), u(sender), _stringlist(to),
                                     bcc=bcc, cc=cc, headers=headers)

        if html:
            msg.attach_alternative(ensure_unicode(html), "text/html")

        msg.send()
        return