Настройка "cc" при отправке электронной почты от Django - PullRequest
3 голосов
/ 26 января 2011

Django 1.3 добавит аргумент "cc" к EmailMessage, что превосходно. Как можно подражать этому, используя 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 для подсказок, и он, кажется, принимает всех получателей как один аргумент (он не имеет отдельных to, 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» (sender), но это не имело значения.

Должна быть возможность "cc" адрес без , а также , включая адрес среди прямых получателей. Как бы я это сделал?

Ответы [ 3 ]

3 голосов
/ 05 июля 2011

Добавьте заголовок Cc: точно так же, как вы это сделали, и дополнительно передайте список адресов CC в ключевом слове «bcc» в конструктор 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 голос
/ 09 марта 2011

Существует квитанция BCC для EmailMultiAl Альтернативы, я использую ее в функции-обертке для автоматической 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)
0 голосов
/ 29 июня 2016

EmailMultiAlternatives является подклассом EmailMessage .Вы можете указать bcc и cc при инициализации сообщения.

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

Скопировано из Ссылка

...