我对这种结构进行了反向工程,以便在实践中使用:
+-------------------------------------------------------+| multipart/mixed |||| +-------------------------------------------------+ || | multipart/related | || | | || | +-------------------------------------------+ | || | | multipart/alternative | | || | | | | || | | +-------------------------------------+ | | || | | | text can contain [cid:logo.png] | | | || | | +-------------------------------------+ | | || | | | | || | | +-------------------------------------+ | | || | | | html can contain src="cid:logo.png" | | | || | | +-------------------------------------+ | | || | | | | || | +-------------------------------------------+ | || | | || | +-------------------------------------------+ | || | | image logo.png "inline" attachment | | || | +-------------------------------------------+ | || | | || +-------------------------------------------------+ |||| +-------------------------------------------------+ || | pdf ("download" attachment, not inline) | || +-------------------------------------------------+ |||+-------------------------------------------------------+不幸的是,我只发现了这个复杂的解决方案:
from django.core.mail.message import EmailMessagedef create_email(subject='', body='', from_email=None, to=None, bcc=None, connection=None, attachments=[], headers=None, cc=None, reply_to=None, html_body='', html_inline_attachments=[]): message = _create_email(subject=subject, body=body, from_email=from_email, to=to, bcc=bcc, connection=connection, headers=headers, cc=cc, reply_to=reply_to, html_body=html_body, html_inline_attachments=html_inline_attachments) for attachment in attachments: if isinstance(attachment, basestring): message.attach_file(attachment) continue message.attach(attachment) return messagedef _create_email(subject='', body='', from_email=None, to=None, bcc=None, connection=None, headers=None, cc=None, reply_to=None, html_body='', html_inline_attachments=[]): if not (body or html_body): raise ValueError('Missing body or html_body!') for address, type, name in [ (from_email, basestring, 'from_email'), (to, list, 'to'), (cc, list, 'cc'), (bcc, list, 'bcc')]: if address and not isinstance(address, type): raise ValueError('"{}" must be a list! ({})'.format(name, address)) if body and not html_body: if html_inline_attachments: raise ValueError('"html_body" is missing!')


