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

时间:2011-01-26 07:59:56

标签: python django email sendmail

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)

这正确设置了“抄送”标题但实际上并未发送抄送副本。我查看了SMTP.sendmail的线索,它似乎将所有收件人作为单个参数(它没有单独的toccbcc参数)

接下来我尝试了这个:

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”标题(到sender),但这没什么区别。

必须可以在不使用 的情况下“抄送”地址,包括直接收件人中的地址。我该怎么做?

3 个答案:

答案 0 :(得分:3)

像你一样添加Cc:标题,并另外将“bcc”关键字arg中的CC地址列表传递给EmailMessage构造函数。这似乎有点违反直觉,但这样做的真正效果就是将CC地址添加到收件人列表中,这正是您想要做的。 (如果你想进一步了解标题和收件人列表之间的区别,关于SMTP的维基百科文章提供了一些不错的背景。)

message = EmailMessage(subject=subject,
                       body=body,
                       from_email=sender,
                       to=to_addresses,
                       bcc=cc_addresses,
                       headers={'Cc': ','.join(cc_addresses)})
message.send()

答案 1 :(得分:1)

对于EmailMultiAlternatives有一个BCC kwarg,我在包装函数中使用它来自动BCC记录所有出站通信的电子邮件帐户。

from django.core.mail import EmailMultiAlternatives

def _send(to, subject='', text_content='', html_content='', reply_to=None):
    if not isinstance(to, (list, tuple)):
        to = (to,)
    kwargs = dict(
        to=to,
        from_email='%s <%s>' % ('Treatful', settings.EMAIL_HOST_USER),
        subject=subject,
        body=text_content,
        alternatives=((html_content, 'text/html'),)
    )
    if reply_to:
        kwargs['headers'] = {'Reply-To': reply_to}
    if not settings.DEBUG:
        kwargs['bcc'] = (settings.RECORDS_EMAIL,)
    message = EmailMultiAlternatives(**kwargs)
    message.send(fail_silently=True)

答案 2 :(得分:0)

EmailMultiAlternatives是EmailMessage的子类。初始化消息时,您可以指定bcc和cc。

msg = EmailMultiAlternatives(subject, text_content, from_email, [to_email], bcc=[bcc_email], cc=[cc_email])

Link

复制