Hi all,

I have this function that helps send emails with attachments:

def send_email(…):
    …
    msg = EmailMessage(
            subject, body, send_from,
            recipients_list, cc=cc, bcc=bcc,
            headers={'Reply-To': reply_to})
    msg.attach_alternative(html_body, "text/html")
    for f in files:
        try:
            email_fn, path = f
        except (ValueError, TypeError):
            path = f
            _, email_fn = os.path.split(path)
        with open(path, 'rb') as f:
            contents = f.read()
            msg.attach(email_fn, contents)

    msg.send()


In the case where path points to a file with a text mimetype (e.g., 
'text/csv'), this fails with this error:

AttributeError: 'bytes' object has no attribute 'encode'

Here's an excerpt from django.core.mail.message. The error occurs on the 
line 4.

        basetype, subtype = mimetype.split('/', 1)
        if basetype == 'text':
            encoding = self.encoding or settings.DEFAULT_CHARSET
            attachment = SafeMIMEText(content, subtype, encoding)
        elif basetype == 'message' and subtype == 'rfc822':
            # Bug #18967: per RFC2046 s5.2.1, message/rfc822 attachments
            # must not be base64 encoded.
            if isinstance(content, EmailMessage):
                # convert content into an email.Message first
                content = content.message()
            elif not isinstance(content, Message):
                # For compatibility with existing code, parse the message
                # into an email.Message object if it is not one already.
                content = message_from_string(content)

            attachment = SafeMIMEMessage(content, subtype)
        else:
            # Encode non-text attachments with base64.
            attachment = MIMEBase(basetype, subtype)
            attachment.set_payload(content)
            Encoders.encode_base64(attachment)
        return attachment

My question is, why not use base64 encoding if the attachment content is 
specified as bytes?

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/e19dd1f5-751d-4136-9923-ecb14cc7052d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to