Django 1.3将在EmailMessage
处添加一个“ cc”参数,这非常好.使用Django 1.2怎么模仿呢?
首先,我尝试了这个:
headers = None
if form.cleaned_data['cc_sender']:
headers = {'Cc': sender} # `cc` argument added in Django 1.3
msg = EmailMultiAlternatives(subject, message, sender, recipients, headers=headers)
msg.attach_alternative(replace(convert(message)), 'text/html')
msg.send(fail_silently=False)
这样可以正确设置“ Cc”标题,但实际上并未发送副本.我查看了SMTP.sendmail的线索,它似乎将所有收件人作为一个参数(它没有与,cc和bcc分开的参数).
接下来,我尝试了这个:
headers = None
if form.cleaned_data['cc_sender']:
headers = {'Cc': sender} # `cc` argument added in Django 1.3
recipients.append(sender) # <-- added this line
msg = EmailMultiAlternatives(subject, message, sender, recipients, headers=headers)
msg.attach_alternative(replace(convert(message)), 'text/html')
msg.send(fail_silently=False)
此方法有效,但意味着当我单击“答复”(无论如何在Gmail中)时,两个地址均显示在“收件人”字段中.我也尝试设置“ Reply-To”标头(发送方),但这没什么区别.
必须能够“抄送”一个地址,而又不将地址包括在直接收件人中.我该怎么办?
解决方法:
就像您一样添加Cc:标头,并将“ bcc”关键字arg中的CC地址列表传递给EmailMessage构造函数.看起来有点违反直觉,但这的真正效果只是将抄送地址添加到收件人列表中,而这正是您要执行的操作. (如果您想更多地了解标头和收件人列表之间的区别,则SMTP上的Wikipedia文章提供了一些不错的背景知识).
message = EmailMessage(subject=subject,
body=body,
from_email=sender,
to=to_addresses,
bcc=cc_addresses,
headers={'Cc': ','.join(cc_addresses)})
message.send()