前言
Django的send_mail()和send_mass_mail()函数事实上是对EmailMessage类使用方式的一个轻度封装。send_mail()和相关的其他封装函数并没有充分使用EmailMessage类的所有特性。
要想使用更多特性,比如暗送(BCC),加入附件,或是多用途格式(multi-part)邮件,都要直接创建EmailMessage实例。
有些资料用的EmailMultiAlternatives类,有些用的EmailMessage类,这2个其实有关联,EmailMultiAlternatives类继承了EmailMessage类
EmailMessage
EmailMessage类使用下列参数初始化(除非使用位置参数,否则默认顺序如下)。所有参数均可选,均可在调用send()方法之前的任何时间对其赋值。
- subject:邮件的标题行
- body:邮件的主体内容文本,须是纯文本信息。
- from_email:发送者的地址。[email protected] 或 Fred [email protected] 格式都是合法的。如果忽略该参数,Django就会使用 DEFAULT_FROM_EMAIL 配置项。
- to:收件人地址列表或元组。
- bcc:发送邮件时用于“Bcc”头信息的一组列表或元组,也就是暗送的收件人。
- connection:一个邮件后端实例。用同一个链接发送多封邮件就要用到该参数。忽略该参数时,会在调用send()时自动创建一个新链接。
- attachments:置于邮件报文内的附件列表。列表元素可以是email.MIMEBase.MIMEBase 实例,也可以是(filename, content, mimetype) 三部分构成的元组。
- headers:置于邮件报文内的其他头信息(header)的字典。字典的key是头信息的名称,字典的value是头信息的值。这样做能确保头信息的名称和对应值会以正确的格式保存于邮件报文中。
- cc:发送邮件时放与"Cc"头信息的一系列列表或元组。
- reply_to:发送电子邮件时"回复"标题中使用的收件人地址列表或元组。
class EmailMessage:
"""A container for email information."""
content_subtype = 'plain'
mixed_subtype = 'mixed'
encoding = None # None => use settings default
def __init__(self, subject='', body='', from_email=None, to=None, bcc=None,
connection=None, attachments=None, headers=None, cc=None,
reply_to=None):
...省略
def send(self,fail_silently=False) :
"""
发送邮件报文。如果在构造邮件时如果指定了某个链接(conne