2011-12-28 12 views
6

私のDjangoアプリケーションには10,000人のユーザーがおり、すべて電子メールを使用しています。私はすべての人に1ヶ月に1回、電子メールメッセージを送信したいと考えています。このメッセージには、いくつかのPDF添付ファイルが含まれている可能性があります。Djangoで10,000人のユーザに電子メールを送信するにはどうすればよいですか?

私が試みたのは、EmailMessageオブジェクトを使用してそれらのすべてに電子メールを送信することでした。送信する前に、このEmailMessageのbccコンポーネントにすべてのユーザーの電子メールアドレスを追加します。

 recList = [] 
     for recipient in rec: 
      reci = str.strip(str(recipient)) 
      recList.append(reci) 
      message = (form.cleaned_data['subject'], form.cleaned_data['message'], '[email protected]', recList) 
     mail = EmailMessage(form.cleaned_data['subject'], form.cleaned_data['message'], '[email protected]', ['[email protected]'], recList) 
     num_attachments = 0 
     if form.cleaned_data['attachment'] != None: 
      email_attachment = EmailAttachment(
       document_name = form.cleaned_data['attachment'].name, 
       email_message = email, 
       document = form.cleaned_data['attachment'], 
      ) 
      email_attachment.save() 
      mail.attach_file(settings.MEDIA_ROOT + "/" + email_attachment.document.name) 
     mail.send(fail_silently=False) 

しかし、電子メールを送信すると、Djangoは「接続がリセットされました」とメッセージを送信して送信しません。私は、サーバー接続が閉じられていると仮定しています。

Djangoで一斉メールを送信する効率的な方法は何ですか? send_mass_mail()はもっと効果的でしょうか?

+0

recipient.hasSignedUpForEmailフラグをチェックしていないことに注意してください。また、ユーモアは少なく、なぜ「メッセージ」を作成し、毎回上書きされてループ内にあるのですか? – Spacedman

+0

あなたはhttp://code.google.com/p/django-mailer/を試してみましたか? – Ahsan

答えて

6

代替案:メールサービスにサインアップし、APIを使用してメールリストを管理し、メールを送信します。このアプローチの利点のいくつか:

  • 彼らはあなたのための任意の登録解除の要求を処理するので、あなたのメールをしたくないユーザーに除外フラグを追加することについて心配する必要はありません。
  • ユーザーの受信トレイから迷惑メールをフィルタリングしたり、ホスティングプロバイダを迷惑にする可能性は低くなります。

特に、とCampaign MonitorのようなAPIラッパーがあります。フックを追加すると、メーリングリストに新しいユーザーを追加したり、アカウントを削除したユーザーを削除することができます(関連する場合)。

0

電子メールのBCCヘッダーには10000個のレコードを入れることはできません。

5

send_mass_mailは毎回接続を終了しないため、send_mass_mailを使用してください。 docs

また、サーバーのパワフルさに応じて、約100〜1,000のグループにメッセージをチャンクします。その理由は、小グループでエラーをキャッチして再試行できるためです。これにより、受信者ごとに個別のメールが送信されるため、理想的です。数千人のBCCが素晴らしいとは言えません。

関連する問題