Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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
Django EmailMessage类的执行使网站运行缓慢_Django_Email_Django Views_Bootstrap Modal - Fatal编程技术网

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....',

我使用Django的EmailMessage类从视图发送自动邮件。但是,在发送电子邮件之前,网站会停止显示模式中的下一个呈现页面。如果我删除电子邮件发送的东西,那么网站是非常快的,工作正常。请指导如何在不强迫用户等待邮件发送过程的情况下发送邮件。我的局部视图代码如下所示,以供参考:

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类。是的。。我现在也看到了。对不起!这不是问题。如果你还有什么要告诉我的,我已经补充了答案。