Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.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
如何在python fast中向数十万个收件人发送邮件,每个收件人在邮件头中显示为收件人?_Python_Email_Sendmail_Smtplib - Fatal编程技术网

如何在python fast中向数十万个收件人发送邮件,每个收件人在邮件头中显示为收件人?

如何在python fast中向数十万个收件人发送邮件,每个收件人在邮件头中显示为收件人?,python,email,sendmail,smtplib,Python,Email,Sendmail,Smtplib,我正在寻找用Python发送大量邮件(数十万封)的解决方案。我有一个收件人列表(在一个文件中),我想向所有收件人发送一封邮件。我希望每个收件人在邮件头中显示为收件人,而不是密件抄送或抄送。好吧,我的解决方案是:分别向他们每个人发送邮件,而不是向所有人发送邮件。我做了以下工作:(我使用了smtplib,线程): 它工作起来很慢(大约每秒6封邮件)。所以请帮我加快速度。或者建议我做这项工作的其他解决方案。多谢各位 最快的方法是在您的计算机上安装邮件传输代理,并使用/usr/sbin/sendmail

我正在寻找用Python发送大量邮件(数十万封)的解决方案。我有一个收件人列表(在一个文件中),我想向所有收件人发送一封邮件。我希望每个收件人在邮件头中显示为收件人,而不是密件抄送或抄送。好吧,我的解决方案是:分别向他们每个人发送邮件,而不是向所有人发送邮件。我做了以下工作:(我使用了smtplib,线程):


它工作起来很慢(大约每秒6封邮件)。所以请帮我加快速度。或者建议我做这项工作的其他解决方案。多谢各位

最快的方法是在您的计算机上安装邮件传输代理,并使用
/usr/sbin/sendmail
邮件界面将您的所有电子邮件发送给它。大多数合理的邮件服务器每秒可以接受数千封邮件进行传递,并且可以执行一些SMTP管道,以便在单个连接中将邮件发送到目标域上的多个收件人,从而大大减少通信开销并提高邮件吞吐量。(这不会影响用户对电子邮件的看法。)

大多数邮件服务器还可以非常好地处理暂时停机的服务器,这一点非常重要,因为许多站点都使用它来对付垃圾邮件

但是,如果您真的希望通过Python中的网络连接与SMTP服务器联系,那么最好使用一组发送线程,这些线程将从队列中提取地址,创建并发送电子邮件,然后返回队列以获得另一个要服务的地址。您当前的代码为每个邮件传递创建和销毁一个新线程。线程的创建和销毁都需要时间,所有这些开销都是本可以用来处理邮件的时间

此外,线程池将限制活动连接的总数。创建1000个单独但同时连接到单个邮件服务器是没有意义的。在您可以发送任何SMTP通信之前,设置每个会话的服务器需要三倍的延迟才能建立TCP会话。因此,创建十个线程和十个连接,并重用这些连接来发送电子邮件。(即使是十个线程也可能会有点过头——两个或三个线程可能会更好。见鬼,一个线程可能是最好的,不过如果该连接中断(每个连接的邮件限制?),在重新建立连接之前,您将有一段时间不发送任何内容。)

您现在创建的与非常类似——您启动了数百或数千个线程,但可能没有足够的内存将它们同时保存在RAM中。您可能已经引入了足够多的交换,从而大大降低了发送系统的性能,在发送系统中,单个执行线程可能完全适合内存并在不暂停交换的情况下运行。

我的建议(也是最简单的建议)是将这项工作卸载给某些第三方,并在代码中调用它们的库

似乎很受欢迎(这是他们的)。他们还提供慷慨的免费计划


是另一种选择(这是他们的选择)。谷歌应该为你提供成千上万的电子邮件。

?你是dem…垃圾邮件发送者之一吗?非常感谢!我以前对线程不太清楚。我会尽力深入了解他们。
class SendMail(threading.Thread):
  def __init__(self, from, to, subject, message):
     self.from = from
     self.to = to
     self.subject = subject
     self.message = message 
  def run(self):
    try:
                msg = MIMEMultipart('alternative')
                msg['Subject'] = self.subject
                msg['From'] = self.from
                msg['To'] = self.to
                msg.attach(MIMEText(self.message , 'html'))
                server = smtplib.SMTP()              
                server.connect('xxxxx', 25)
                server.login('cxxxxx', 'yyyyyy')                
                server.sendmail(self.from, self.to, msg.as_string())
    except:
          pass

def sendmail():
   f = open('recipients','w')
   from = "me@mail.test"
   subject = "hello"
   message = "Hello Hello"
   for line in f.readlines():
      t = SendMail(from, line, subject, message)
      t.run()
   f.close()