2011-12-28 14 views
6

La mia applicazione Django ha 10.000 utenti, tutti con e-mail. Vorrei inviare un messaggio e-mail a tutti loro dire una volta al mese. Questo messaggio potrebbe avere alcuni allegati pdf.Come si invia un'email a 10.000 utenti in Django?

Quello che ho provato è usare un oggetto EmailMessage per inviare un'email a tutti loro. Prima di inviare, aggiungo tutti gli indirizzi e-mail degli utenti al componente bcc di questo EmailMessage.

 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) 

Tuttavia, quando mando l'e-mail, Django si lamenta che "il collegamento è stato ripristinato" e non invia. Suppongo che la connessione al server sia stata chiusa.

Qual è un modo efficace per inviare un'esplosione di massa in Django? send_mass_mail() sarebbe più efficace?

+0

Nota: si è dimenticato di controllare il flag recipient.hasSignedUpForEmail. Inoltre, meno umoristicamente, perché crei un "messaggio" e perché è all'interno del ciclo, venendo sovrascritto ogni volta? – Spacedman

+0

hai provato tramite http://code.google.com/p/django-mailer/ – Ahsan

risposta

6

Un suggerimento alternativo: iscriversi a un servizio di mailing e utilizzare le loro API per mantenere la tua mailing list e inviare mailing. Un paio di vantaggi di questo approccio:

  • Faranno gestire eventuali richieste di annullamento per voi, in modo da non dovete preoccuparvi di aggiungere bandiere di esclusione per gli utenti che non vogliono la posta elettronica.
  • È meno probabile che i messaggi di posta elettronica vengano filtrati dalla posta in arrivo degli utenti indesiderati o disturbino il fornitore di servizi di hosting.

Sono disponibili wrapper API per, tra gli altri, MailChimp e Campaign Monitor. Dovrebbe essere abbastanza facile aggiungere ganci per aggiungere nuovi utenti alla mailing list e (se rilevante) rimuovere tutti gli utenti che eliminano i loro account.

0

Penso che un'intestazione di e-mail BCC non possa contenere 10000 record.

5

È necessario utilizzare send_mass_mail poiché non chiude la connessione ogni volta. docs

Vorrei anche dividere i messaggi in gruppi di circa 100-1000, a seconda della potenza del server. Il motivo è che puoi riprendere errori in piccoli gruppi per riprovare. Ciò si traduce anche in una email separata per destinatario, che è l'ideale. BCC Fare migliaia di persone non è grandioso.