python-从Django发送电子邮件时设置“ cc”

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()
上一篇:是否可以将sendmail配置为默认使用SMTP身份验证(与PHP一起使用)?


下一篇:通过javax.mail API发送电子邮件.消息的某些html属性将被忽略