Как отправить электронное письмо 10000 пользователей в Джанго?

В моем приложении Django 10000 пользователей, и все они имеют электронную почту. Я хотел бы отправлять сообщения электронной почты всем им, скажем, раз в месяц. Это сообщение может иметь некоторые вложения в формате 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)

Однако, когда я отправляю электронное письмо, Джанго жалуется, что "Соединение было сброшено" и не отправляет. Я предполагаю, что соединение с сервером было закрыто.

Какой эффективный способ отправить массовую рассылку по электронной почте в Джанго? Было бы send_mass_mail() быть более эффективным?

3 ответа

Решение

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

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

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

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

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

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

Другие вопросы по тегам