hermansc
hermansc

Reputation: 738

Sending 1000+ emails in Django

Here is my setup right now:

connection = mail.get_connection()
maillist = []

# my real setup is a little more complex for-loop, but basicly I add all recipients to a list. 
for person in object_list:
    mail_subject = "Mail subject here"
    mail_body = "Mail body text...bla bla"
    email_sender = "[email protected]"
    maillist.append((mail_subject, mail_body, email_sender, [person.email]))

#send_mass_mail wants a tuple, so we convert the list
mailtuple = tuple(maillist)
mail.send_mass_mail(mailtuple, fail_silently=False, connection=connection)

However, the forloop iterates over 1000+ objects/persons and when I try this method I'm able to send 101 emails, and then it stops. No errors (as I can see) anywhere.

A fellow developer mentioned that maybe the POST size was too big? Any ideas from the SO-community?

Upvotes: 0

Views: 2971

Answers (3)

Dirk Eschler
Dirk Eschler

Reputation: 2569

Since you mentioned a POST limit - do you send out the emails in a view? I'm wondering how you handle canceled requests in your setup.

I'm using a management command to send out 1000+ newsletters. But instead of send_mass_mail i use the normal send method in a loop. It takes about 5 minutes (haven't a correct count atm) to send out the mails and i haven't run into any server limits yet.

My plan is to switch to celery to handle sending through a web interface. Perhaps you want to have a look at it in case you haven't already.

http://celeryproject.org/

Upvotes: 2

code_burgar
code_burgar

Reputation: 12323

As Micah suggested, there is a good chance you are hitting server limits.

Generally, when dealing with mass mail, it is always a good idea to throttle the sending. Doing 50 mails every 5 seconds for 300 seconds beats 3000 mails at once for many practical reasons including smtp server limitations.

Upvotes: 2

Micah Carrick
Micah Carrick

Reputation: 10197

Your SMTP server probably has some send limits. For example, I believe Gmail limits outgoing mail to 100 recipients.

Upvotes: 4

Related Questions