Python hellp:在Django中发送批量电子邮件
我有一个通过smtp发送邮件的应用程序。它工作正常,在3-4秒内发送邮件。我希望他发送(批量电子邮件)。 你能帮帮我吗 views.pyPython 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
# -*- 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已通过电子邮件发送了一封电子邮件,我想发送大量邮件。可能是重复的感谢兄弟,请为我编辑,因为我不知道如何:)