Django EmailMessage类的执行使网站运行缓慢
我使用Django的EmailMessage类从视图发送自动邮件。但是,在发送电子邮件之前,网站会停止显示模式中的下一个呈现页面。如果我删除电子邮件发送的东西,那么网站是非常快的,工作正常。请指导如何在不强迫用户等待邮件发送过程的情况下发送邮件。我的局部视图代码如下所示,以供参考:Django EmailMessage类的执行使网站运行缓慢,django,email,django-views,bootstrap-modal,Django,Email,Django Views,Bootstrap Modal,我使用Django的EmailMessage类从视图发送自动邮件。但是,在发送电子邮件之前,网站会停止显示模式中的下一个呈现页面。如果我删除电子邮件发送的东西,那么网站是非常快的,工作正常。请指导如何在不强迫用户等待邮件发送过程的情况下发送邮件。我的局部视图代码如下所示,以供参考: email =EmailMessage( 'Message received', 'You received a message....',
email =EmailMessage(
'Message received',
'You received a message....',
settings.DEFAULT_FROM_EMAIL,
[request.user.email],
reply_to=['noreply@example.com'])
email.content_subtype = "html"
email.send(fail_silently=True)
return JsonResponse({"instance": rendered,"valid":True}, status=200)
编辑:更新:
我还尝试了async_to_sync函数来调用中建议的email.send方法。但是,主流程仍在等待邮件发送过程。因此我今天实现了相同的功能,只是使用了另一种方法。我的工具仍然很快,所以也许这可以帮助你
def sendMail():
subject = "Automate Info"
message = "Hello"
email_from = settings.EMAIL_HOST_USER
send_mail(
subject,
message,
email_from,
recipient_list
)
return
settings.py:
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST = "smtp.gmail.com"
EMAIL_USE_TLS = True
EMAIL_PORT = 25
EMAIL_HOST_USER = "yourEmail@example.com"
EMAIL_HOST_PASSWORD = "yourpassword"
EMAIL_USE_TLS = True
EMAIL_USE_SSL = False
你也可以使用Email.html模板,有几种方法可以做到这一点。如果你想要这个,我可以搜索这个并将其添加到帖子中。我今天看了这些东西,所以我能很快找到它。
不管怎样,这对我来说很好,而且速度很快 我用过线程,效果很好。我已经编辑了答案。 我在这里添加了带有附加参数的代码,以供参考
import threading
from threading import Thread
class EmailThread(threading.Thread):
def __init__(self, subject, html_content, recipient_list, replyto):
self.subject = subject
self.recipient_list = recipient_list
self.html_content = html_content
self.reply_to = replyto
threading.Thread.__init__(self)
def run (self):
msg = EmailMessage(self.subject, self.html_content, settings.EMAIL_HOST_USER, self.recipient_list, reply_to=self.reply_to)
msg.content_subtype = "html"
msg.send(fail_silently=True)
def send_html_mail(subject, html_content, recipient_list, replyto):
EmailThread(subject, html_content, recipient_list, replyto).start()
这也使得服务器等待函数sendMail执行。为了实现快速性,我认为函数或类需要在不停止主控制流的情况下并行运行。顺便说一句,sendMail函数是一个薄包装器,在其内部使用相同的EmailMessage类。是的。。我现在也看到了。对不起!这不是问题。如果你还有什么要告诉我的,我已经补充了答案。