【问题标题】:hellp: Sending Bulk email in Djangohellp:在 Django 中发送批量电子邮件
【发布时间】:2016-04-11 04:42:06
【问题描述】:

我有一个应用程序通过 smtp 发送邮件。它工作正常并在 3-4 秒内发送邮件。我希望他发送(批量电子邮件)。 你能帮帮我吗?

views.py

    # -*- coding: utf-8 -*-
from __future__ import absolute_import
# import json
import smtplib
from django.views.generic import TemplateView, View
from django.views.generic.edit import UpdateView
from django.shortcuts import get_object_or_404, redirect
from django.core.urlresolvers import reverse_lazy
from django.http import JsonResponse
from django.contrib.auth.decorators import login_required
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_POST
from braces.views import LoginRequiredMixin
from .forms import ServerForm, SettingForm, MailerForm
from .models import Server, Setting
from .tasks import sender


class HomeView(LoginRequiredMixin, TemplateView):
    template_name = 'core/home.jinja'

    def get_context_data(self, **kwargs):
        context = super(HomeView, self).get_context_data(**kwargs)
        context['form'] = MailerForm(initial={'headers': '{}'})
        return context

    def post(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        form = MailerForm(request.POST, request.FILES)
        if form.is_valid():

            sender_name = form.cleaned_data['sender_name']
            sender_email = form.cleaned_data['sender_email']
            mail_list = form.cleaned_data['mail_list']
            subject = form.cleaned_data['subject']
            encoding = form.cleaned_data['encoding']
            headers = form.cleaned_data['headers']

            message = form.cleaned_data['message']

            servers = Server.objects.all()
            configuration = Setting.objects.first()

            email_number = configuration.email_number
            time_delay = configuration.time_delay

            # Parsing the email list and spliting it by configured emails
            # number
            recipients = [l.strip() for l in mail_list.readlines()]
            splitted_emails = [list(recipients[i:i + email_number])
                               for i in range(0, len(recipients), email_number)]

            sender.delay(sender_name, sender_email, splitted_emails,
                         servers, subject, message, encoding, headers, time_delay)

        context['form'] = form
        return self.render_to_response(context)

tasks.py

 # -*- coding: utf-8 -*-
from __future__ import absolute_import
import time
import uuid
from django.core.mail import EmailMessage
from django.template import Context, Template
from celery.decorators import task
from app.utils import get_next_server, smtp_connection
from app.core.encoders import encode_base64, qpencode, encode_quopri
# from django.core.mail import send_mail


@task(name="Sending Emails")
def sender(sender_name, sender_email, splitted_emails, servers, subject, message, encoding, headers, dt,):
    s = get_next_server(servers)


    for l in splitted_emails:
        server = s.next()
        print server.host, server.port
        # if server.status:
        message = Template(message).render(Context({'link': str(uuid.uuid4())}))
        connection = smtp_connection(server)
        for email in l:
            print "Sending to {}".format(email)

            mail = EmailMessage(
                subject,
                message,
                "{} <{}>".format(sender_name, sender_email),
                [email, ],
                connection=connection,
                headers=headers,
            )


            mail.content_subtype = 'html'
            mail.send(fail_silently=False)
        connection.close()

你能帮帮我吗? 你能帮帮我吗?

【问题讨论】:

  • 你能解释一下你的确切问题吗?
  • @javapapo 已通过电子邮件发送电子邮件,我想发送大量电子邮件。

标签: python django email


【解决方案1】:

尝试使用send_mailsend_mass_mail,记录在此:https://docs.djangoproject.com/en/1.9/topics/email/

电子邮件数组有一个参数。 send_mass_mail 甚至会使用一个连接发送所有邮件,这似乎是您想要的。

【讨论】:

  • 谢谢兄弟,请帮我编辑,因为我不知道怎么做:)
猜你喜欢
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多