Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.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-发送大量电子邮件--SMTP连接断开_Django_Gmail_Sendmail - Fatal编程技术网

Django-发送大量电子邮件--SMTP连接断开

Django-发送大量电子邮件--SMTP连接断开,django,gmail,sendmail,Django,Gmail,Sendmail,我有一个可以向客户发送1000多封电子邮件的应用程序。每封电子邮件都是根据客户定制的。我有我的Django应用程序,使用我的Gmail商业帐户(为谷歌应用程序付费)发送电子邮件 我遇到的问题是,大约80-100封电子邮件成功发送后,与Gmail的SMTP连接中断。我必须等待大约10-15分钟才能开始再次发送。但是,在大约70-100封电子邮件正常发送后,连接再次中断 我使用Django-Mailer-2发送邮件。以下是我的Django应用程序产生的错误: Traceback (most rece

我有一个可以向客户发送1000多封电子邮件的应用程序。每封电子邮件都是根据客户定制的。我有我的Django应用程序,使用我的Gmail商业帐户(为谷歌应用程序付费)发送电子邮件

我遇到的问题是,大约80-100封电子邮件成功发送后,与Gmail的SMTP连接中断。我必须等待大约10-15分钟才能开始再次发送。但是,在大约70-100封电子邮件正常发送后,连接再次中断

我使用Django-Mailer-2发送邮件。以下是我的Django应用程序产生的错误:

Traceback (most recent call last):
  File "manage.py", line 11, in <module>
    execute_manager(settings)
  File "/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py", line 438, in execute_manager
    utility.execute()
  File "/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 191, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 220, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 351, in handle
    return self.handle_noargs(**options)
  File "/usr/local/lib/python2.6/dist-packages/django_mailer/management/commands/send_mail.py", line 47, in handle_noargs
    send_all(block_size, backend=settings.USE_BACKEND)
  File "/usr/local/lib/python2.6/dist-packages/django_mailer/engine.py", line 91, in send_all
    blacklist=blacklist)
  File "/usr/local/lib/python2.6/dist-packages/django_mailer/engine.py", line 179, in     send_queued_message
    [message.to_address], smart_str(message.encoded_message))
  File "/usr/lib/python2.6/smtplib.py", line 697, in sendmail
    self.rset()
  File "/usr/lib/python2.6/smtplib.py", line 438, in rset
    return self.docmd("rset")
  File "/usr/lib/python2.6/smtplib.py", line 363, in docmd
    return self.getreply()
  File "/usr/lib/python2.6/smtplib.py", line 340, in getreply
    raise SMTPServerDisconnected("Connection unexpectedly closed")
smtplib.SMTPServerDisconnected: Connection unexpectedly closed
回溯(最近一次呼叫最后一次):
文件“manage.py”,第11行,在
执行\u管理器(设置)
文件“/usr/local/lib/python2.6/dist-packages/django/core/management/___init__.py”,第438行,在执行管理器中
utility.execute()
文件“/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py”,第379行,在execute中
self.fetch_命令(子命令)。从_argv(self.argv)运行_
文件“/usr/local/lib/python2.6/dist-packages/django/core/management/base.py”,第191行,从_argv运行
self.execute(*args,**选项._dict__;
文件“/usr/local/lib/python2.6/dist packages/django/core/management/base.py”,第220行,在execute中
输出=self.handle(*args,**选项)
文件“/usr/local/lib/python2.6/dist-packages/django/core/management/base.py”,第351行,在handle中
返回self.handle\u noargs(**选项)
文件“/usr/local/lib/python2.6/dist packages/django_mailer/management/commands/send_mail.py”,第47行,在handle_noargs中
全部发送(块大小,后端=设置。使用后端)
文件“/usr/local/lib/python2.6/dist packages/django_mailer/engine.py”,第91行,全部发送
黑名单=黑名单)
文件“/usr/local/lib/python2.6/dist packages/django\u mailer/engine.py”,第179行,在发送队列消息中
[message.to_address],smart_str(message.encoded_message))
sendmail中的文件“/usr/lib/python2.6/smtplib.py”,第697行
self.rset()
文件“/usr/lib/python2.6/smtplib.py”,第438行,在rset中
返回self.docmd(“rset”)
docmd中的文件“/usr/lib/python2.6/smtplib.py”,第363行
返回self.getreply()
文件“/usr/lib/python2.6/smtplib.py”,第340行,在getreply中
升起SMTPServerDisconnected(“连接意外关闭”)
smtplib.SMTPServerDisconnected:连接意外关闭
最后两行让我觉得Gmail正在关闭连接。我接触过Gmail,他们声称是我的软件造成了问题,而不是他们


您觉得怎么样?

在这种情况下,您很可能只能进行一些调试: 第697行附近的“/usr/lib/python2.6/smtplib.py”如下所示:

    (code,resp) = self.mail(from_addr, esmtp_opts)
    if code != 250:
        self.rset()
        raise SMTPSenderRefused(code, resp, from_addr)
在我看来,服务器通过取消连接来处理RSET命令。如果是这样的话,你可以试试。通过手动处理连接并发出rset()命令

此外,此代码似乎是在引发SMTPSenderRefused异常之前调用的,因此无论如何都不会发送此特定邮件

快速修复方法可能是使用monkey补丁来禁用RSET命令:

import smtplib
smtplib.SMTP.rset = lambda self: 0

在这种情况下,您很可能只能进行一些调试: 第697行附近的“/usr/lib/python2.6/smtplib.py”如下所示:

    (code,resp) = self.mail(from_addr, esmtp_opts)
    if code != 250:
        self.rset()
        raise SMTPSenderRefused(code, resp, from_addr)
在我看来,服务器通过取消连接来处理RSET命令。如果是这样的话,你可以试试。通过手动处理连接并发出rset()命令

此外,此代码似乎是在引发SMTPSenderRefused异常之前调用的,因此无论如何都不会发送此特定邮件

快速修复方法可能是使用monkey补丁来禁用RSET命令:

import smtplib
smtplib.SMTP.rset = lambda self: 0

显然,谷歌方面有一些利率限制。我找到了这封邮件,讨论这个问题:

显然,谷歌方面有一些费率限制。我在讨论问题时发现了这个电子邮件帖子:

好的——我解决了这个问题。真的,这更像是一项工作。我相信Gmail正在阻止我的电子邮件,因为他们认为这是垃圾邮件。一封接一封地发送数百封电子邮件,触发了他们的某些事件,并关闭了我的连接。这是我的理论

我的解决方法是向
engine.py
文件添加一行代码。成功发送电子邮件后,我添加了行
time.sleep(70)
。这会导致邮件程序在继续之前只需等待70秒。我添加了此代码并尝试发送所有电子邮件。大约7小时后,成功发送了400多封电子邮件。我想说这是可行的。它不一定要快,只要能工作就行了。我不在乎是否需要几天的时间——只要他们被送到

谢谢你的帮助

好吧,我解决了这个问题。真的,这更像是一项工作。我相信Gmail正在阻止我的电子邮件,因为他们认为这是垃圾邮件。一封接一封地发送数百封电子邮件,触发了他们的某些事件,并关闭了我的连接。这是我的理论

我的解决方法是向
engine.py
文件添加一行代码。成功发送电子邮件后,我添加了行
time.sleep(70)
。这会导致邮件程序在继续之前只需等待70秒。我添加了此代码并尝试发送所有电子邮件。大约7小时后,成功发送了400多封电子邮件。我想说这是可行的。它不一定要快,只要能工作就行了。我不在乎是否需要几天的时间——只要他们被送到


谢谢你的帮助

我遇到了同样的问题。我接受了你的解决方案,但不是每次发完邮件后就睡觉,而是先发10封邮件,然后等70秒。通过这种方式,我成功地发送了200多封电子邮件。当我试着每50封邮件睡一次觉时,我仍然有这个问题,在连接断开之前只发送了100封邮件。

我遇到了同样的问题。我接受了你的解决方案,但不是每次发完邮件后就睡觉,而是先发10封邮件,然后等70秒。我能够成功地发送过来