Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python hellp:在Django中发送批量电子邮件_Python_Django_Email - Fatal编程技术网

Python hellp:在Django中发送批量电子邮件

Python hellp:在Django中发送批量电子邮件,python,django,email,Python,Django,Email,我有一个通过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 im

我有一个通过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()
#-*-编码:utf-8-*-
从未来导入绝对导入
导入时间
导入uuid
从django.core.mail导入EmailMessage
从django.template导入上下文,模板
从芹菜.decorators导入任务
从app.utils导入获取下一个\u服务器、smtp\u连接
从app.core.encoders导入encode_base64、qpencode、encode_quopri
#从django.core.mail导入发送邮件
@任务(name=“发送电子邮件”)
def发送者(发送者名称、发送者电子邮件、拆分的电子邮件、服务器、主题、消息、编码、标题、dt等):
s=获取下一个服务器(服务器)
对于拆分电子邮件中的l:
服务器=s.next()
打印server.host、server.port
#如果服务器状态为:
message=Template(message.render(上下文({'link':str(uuid.uuid4())}))
连接=smtp_连接(服务器)
对于l中的电子邮件:
打印“发送到{}”。格式(电子邮件)
邮件=电子邮件(
主题,,
消息
“{}”。格式(发件人姓名、发件人电子邮件),
[电邮,],
连接=连接,
标题=标题,
)
mail.content\u子类型='html'
mail.send(失败=False)
连接。关闭()
你能帮帮我吗。
您能帮助我吗。

尝试使用
send\u mail
send\u mass\u mail
,记录如下:


有一个用于电子邮件数组的参数
send\u mass\u mail
甚至只需一个连接即可发送所有邮件,这似乎是您想要的。

您能解释一下您的确切问题吗?@javapapo已通过电子邮件发送了一封电子邮件,我想发送大量邮件。可能是重复的感谢兄弟,请为我编辑,因为我不知道如何:)