2011-01-26 69 views
3

Django 1.3では、 "cc"引数がEmailMessageに追加されます。どのようにDjango 1.2を使ってこれを模倣するでしょうか?これは正しく「CC」ヘッダを設定しますが、実際にカーボンコピーを送信しませんでしたDjangoから電子メールを送信するときに "cc"を設定する

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を見て、すべての受信者を1つの引数として取るように見えます(別のtocc、および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で)「返信」打ったときという意味の両方のアドレスが「へ」のフィールドに登場。私はまた、 "返信先"ヘッダ(senderへ)を設定しようとしましたが、これは違いはありませんでした。

直接受信者のアドレスを含むまたのないアドレスを "cc"することができなければなりません。どうすればいい?

+0

からコピー

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

、問題は何とか、メールサーバであるかもしれないようです。私はDjangoがメッセージ自体を送信しないと思って、それをメールサーバーにスプールします。 –

+2

「SMTP.sendmail」が受信者のリストを1つだけ受け取るのは、メッセージヘッダーを気にしないからです。 SMTPには、メールクライアント(例:Thunderbird、Outlookなど)でのみ使用され、リストを作成するための/ ccヘッダーが含まれています。誰がメールを送ってくるのですか?メールが送信されると、 'to 'と' cc'をそのまま残したバージョンをそのリストの人のリストに送り、第2のバージョンをBCCに送るすべての人に送ります。これが明確でない場合は、さらに説明しますが、私は屋根から外れています。 –

答えて

1

EmailMultiAlternativesのBCC kwargがあります。ラッパー機能で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) 
3

Ccを追加:あなたがやったように、ヘッダを、さらにEmailMessageのコンストラクタに「BCC」のキーワード引数にCCアドレスのリストを渡します。これはちょっと直感的ではないようですが、実際には、受信者リストにCCアドレスを追加するだけです。これはまさにあなたがやりたいことです。 (ヘッダーと受信者リストの違いについては、SMTPに関するWikipediaの記事をご覧ください)。

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

EmailMultiAlternativesはEmailMessageのサブクラスです。メッセージを初期化するときにbccとccを指定することができます。 Djangoが正しくCcのヘッダを設定した場合Link

+0

私はそれを自分でテストし、うまく動作します。 – user5091906

関連する問題