2011-12-28 41 views
6

Ứng dụng Django của tôi có 10.000 người dùng, tất cả đều có email. Tôi muốn gửi một email cho tất cả họ nói mỗi tháng một lần. Thông báo này có thể có một số tệp đính kèm pdf.Làm cách nào để gửi email đến 10.000 người dùng ở Django?

Điều tôi đã thử đang sử dụng đối tượng EmailMessage để gửi email đến tất cả các đối tượng đó. Tôi thêm tất cả địa chỉ email của tất cả người dùng vào thành phần bcc của EmailMessage này trước khi gửi.

 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) 

Tuy nhiên, khi tôi gửi email, Django phàn nàn rằng "Kết nối đã được đặt lại" và không gửi. Tôi giả định rằng kết nối máy chủ đã bị đóng.

Cách hiệu quả để gửi hàng loạt email bùng nổ ở Django là gì? send_mass_mail() có hiệu quả hơn không?

+0

Lưu ý rằng bạn quên kiểm tra cờ người nhận.hasSignedUpForEmail. Ngoài ra, ít hài hước hơn, tại sao bạn tạo ra 'thông điệp' và tại sao nó lại nằm trong vòng lặp, bị ghi đè mỗi lần? – Spacedman

+0

bạn đã thử qua http://code.google.com/p/django-mailer/ – Ahsan

Trả lời

6

Một đề xuất thay thế: đăng ký dịch vụ gửi thư và sử dụng API của họ để duy trì danh sách email của bạn và gửi thư. Một vài lợi thế của phương pháp này:

  • Họ sẽ xử lý mọi yêu cầu hủy đăng ký cho bạn, vì vậy bạn không phải lo lắng về việc thêm cờ loại trừ cho người dùng không muốn email của mình.
  • Bạn ít có khả năng bị lọc spam khỏi hộp thư đến của người dùng hoặc làm phiền nhà cung cấp dịch vụ lưu trữ của mình.

Có các trình bao bọc API có sẵn, trong số những thứ khác, MailChimpCampaign Monitor. Nó sẽ khá dễ dàng để thêm vào móc để thêm người dùng mới vào danh sách gửi thư và (nếu có) xóa bất kỳ người dùng nào xóa tài khoản của họ.

0

Tôi nghĩ, tiêu đề BCC E-mail không được chứa 10.000 bản ghi.

5

Bạn nên sử dụng send_mass_mail vì nó sẽ không đóng kết nối mọi lúc. docs

Tôi cũng sẽ chia các thư thành các nhóm khoảng 100-1.000, tùy thuộc vào mức độ mạnh mẽ của máy chủ của bạn. Lý do là bạn có thể bắt lỗi trong các nhóm nhỏ hơn để thử lại. Điều này cũng dẫn đến một email riêng biệt cho mỗi người nhận, đó là lý tưởng. BCC'ing hàng ngàn người không phải là tuyệt vời.

Các vấn đề liên quan