django send_mail()函数需要几分钟时间

Mic*_*Fox 1 python email django sendmail nginx

我正在尝试在views.py文件中的函数中发送电子邮件.我已经按照与此处相同的方式在我的设置文件中设置了电子邮件.

Python Django Gmail SMTP设置

电子邮件发送确实有效,但我的用户一直在抱怨它需要几分钟的时间.我在var/log/mail.log文件中收到gethostbyaddress错误,我将在此处发布.我曾经得到nginx超时错误,但把"proxy_read_timeout 150;" 进入我的/ etc/nginx/sites-enabled/django文件.

http://www.nginxtips.com/upstream-timed-out-110-connection-timed-out-while-reading-response-header-from-upstream/

这解决了与网站交互时的超时错误,但电子邮件仍需要几分钟才能加载.我正在使用digitalocean django液滴,我的所有液滴都出现了这么慢的速度.

这是我的视图功能

@login_required
def AnnouncementPostView(request, leaguepk):
    league = League.objects.get(pk=leaguepk)
    lblog = league.blog

    if request.method == 'POST':
        form = AnnouncementPostForm(request.POST)
        if form.is_valid():
            posttext = request.POST['text']

            newAnnouncement = Announcement(text=posttext, poster=request.user)
            newAnnouncement.save()
            lblog.announce.add(newAnnouncement)

            titleText = "%s Announcement" % (league.name)

            send_mail(titleText, posttext, settings.EMAIL_HOST_USER, ['mytestemail@gmail.com'], fail_silently=False)

       return HttpResponseRedirect(reverse('league-view', args=[league.pk]))
else:
    form = AnnouncementPostForm()

return render(request, 'simposting/announcementpost.html', {'form': form, 'league': league})
Run Code Online (Sandbox Code Playgroud)

这工作,公告发布到所需的页面,并通过电子邮件发送,甚至,这只是一个时间问题,人们已经开始期待了近即时收发邮件的过程,这使得在2-3分钟不可接受的,注册特别是当也导致2-等了3分钟.

一个问题可能是在试图解决与DigitalOcean支持团队这个问题,我改变了我的液滴名和主机名是我设置的域名的事实.

我当前的主机名和droplet名称是mydomain.com.我把它安装在我的/ etc /主机文件的方式.我的/ etc/hosts文件看起来像这样

127.0.0.1 localhost.localdomain localhost mydomain.com
127.0.1.1 mydomain.com
Run Code Online (Sandbox Code Playgroud)

我无功/日志/ mail.log文件,这个回应,每当我尝试发送邮件

Oct 6 16:13:24 "oldDropletName" sm-mta[13660]: gethostbyaddr(10.xxx.xx.x) failed: 1
Oct 6 16:13:24 "oldDropletName" sm-mta[13662]: starting daemon (8.14.4): SMTP+queueing@00:10:00
Run Code Online (Sandbox Code Playgroud)

我希望这是足够的信息来帮助,它已经困扰了几个星期,通常我可以通过在这里查找东西或与支持团队合作解决我的问题,但它让我们感到难过.感谢您抽出宝贵时间提供帮助!

Chi*_*mar 12

发送电子邮件是一个网络绑定任务,您不知道完成与您的情况完全相同需要多长时间.尽管您的网络可能存在延迟,但最好以异步方式执行此类任务,因此您的主线程是免费的.

我在一个项目中使用以下代码.

utils.py

import threading
from django.core.mail import EmailMessage


class EmailThread(threading.Thread):
    def __init__(self, subject, html_content, recipient_list, sender):
        self.subject = subject
        self.recipient_list = recipient_list
        self.html_content = html_content
        self.sender = sender
        threading.Thread.__init__(self)

    def run(self):
        msg = EmailMessage(self.subject, self.html_content, self.sender, self.recipient_list)
        msg.content_subtype = 'html'
        msg.send()


def send_html_mail(subject, html_content, recipient_list, sender):
    EmailThread(subject, html_content, recipient_list, sender).start()
Run Code Online (Sandbox Code Playgroud)

只需从您的视图中调用send_html_mail即可.