Как отправить электронное письмо 10 000 пользователей в Джанго? - PullRequest
7 голосов
/ 28 декабря 2011

В моем приложении Django 10 000 пользователей, и все они с электронными письмами.Я хотел бы отправлять электронные письма всем им, скажем, раз в месяц.К этому сообщению могут быть прикреплены некоторые PDF-файлы.

Я пытался использовать объект EmailMessage для отправки электронной почты всем им.Я добавляю адреса электронной почты всех пользователей в компонент скрытой копии этого EmailMessage перед отправкой.

        recList = []
        for recipient in rec:
            reci = str.strip(str(recipient))
            recList.append(reci)
            message = (form.cleaned_data['subject'], form.cleaned_data['message'], 'emailAdmin@yahoo.com', recList)
        mail = EmailMessage(form.cleaned_data['subject'], form.cleaned_data['message'], 'email_manager@mysite.org', ['email_list@mysite.org'], 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?Будет ли send_mass_mail() более эффективным?

Ответы [ 3 ]

7 голосов
/ 28 декабря 2011

Альтернативное предложение: зарегистрируйтесь в почтовой службе и используйте их API, чтобы поддерживать свой список электронной почты и отправлять рассылки.У этого подхода есть несколько преимуществ:

  • Они будут обрабатывать любые запросы на отмену подписки, поэтому вам не нужно беспокоиться о добавлении флагов исключения для ваших пользователей, которые не хотят получать ваши электронные письма.
  • Вы с меньшей вероятностью будете получать нежелательную почту из почтовых ящиков своих пользователей или раздражать вашего хостинг-провайдера.

Существуют API-оболочки, среди прочего, для MailChimp и Монитор кампании .Должно быть достаточно легко добавить хуки для добавления новых пользователей в список рассылки и (при необходимости) удалить всех пользователей, которые удаляют свои учетные записи.

6 голосов
/ 28 декабря 2011

Вы должны использовать send_mass_mail, поскольку он не будет закрывать соединение каждый раз. документы

Я бы также разбил сообщения на группы по 100-1000, в зависимости от того, насколько мощен ваш сервер.Причина в том, что вы можете перехватывать ошибки в небольших группах для повторной попытки.Это также приводит к отдельному письму для каждого получателя, что идеально.BCC 'тысячи людей не велика.

0 голосов
/ 28 декабря 2011

Я думаю, заголовок BCC электронной почты не может содержать 10000 записей.

...