zend smtp邮件在100多封邮件后崩溃

时间:2014-08-06 14:46:28

标签: php email ssl zend-framework2 smtp

在发送简报类邮件时,我遇到了这个奇怪的问题。

在for循环中,我遍历数据库中的所有用户,并尝试向他们发送包含一些基本信息的所有HTML邮件。现在问题是前200个邮件运行良好,但随后脚本崩溃并发出以下错误:

  

Warning: fwrite(): SSL operation failed with code 1. OpenSSL Error messages: error:140D00CF:SSL routines:SSL_write:protocol is shutdown in /opt/zendframework2/library/Zend/Mail/Protocol/AbstractProtocol.php on line 263 Warning: fwrite(): SSL operation failed with code 1. OpenSSL Error messages: error:140D00CF:SSL routines:SSL_write:protocol is shutdown in /opt/zendframework2/library/Zend/Mail/Protocol/AbstractProtocol.php on line 263 Fatal error: Uncaught exception 'Zend\Mail\Protocol\Exception\RuntimeException' with message 'Could not read from smtp.gmail.com' in /opt/zendframework2/library/Zend/Mail/Protocol/AbstractProtocol.php:308 Stack trace: #0 /opt/zendframework2/library/Zend/Mail/Protocol/AbstractProtocol.php(339): Zend\Mail\Protocol\AbstractProtocol->_receive(300) #1 /opt/zendframework2/library/Zend/Mail/Protocol/Smtp.php(358): Zend\Mail\Protocol\AbstractProtocol->_expect(221, 300) #2 /opt/zendframework2/library/Zend/Mail/Protocol/Smtp.php(394): Zend\Mail\Protocol\Smtp->quit() #3 /opt/zendframework2/library/Zend/Mail/Protocol/AbstractProtocol.php(115): Zend\Mail\Protocol\Smtp->_disconnect() #4 [internal function]: Zend\Mail\Protocol\AbstractProtocol->__destruct() #5 {main} thrown in /opt/zendframework2/library/Zend/Mail/Protocol/AbstractProtocol.php on line 308

现在,我不熟悉smtp,ssl&但我相信错误最重要的一行是:'无法读取smtp.gmail.com'。这对我没有任何意义。

我们一直发送电子邮件(丢失密码,注册邮件等),这总是(据我所知)工作正常。该脚本在短时间内发送过多邮件后崩溃。

好的,这就是问题,现在让我解释一下设置:)

我在标准LAMP服务器(PHP 5.3.10)上运行Zend 2.2.6并使用Zend提供的标准SMTP邮件脚本。我们将Google商家应用用作邮件客户端。以下是邮件脚本的前几行:

  <?PHP
    namespace Mail\Mails;
    use Zend\Mail;
    use Zend\Mail\Message;
    use Zend\Mime\Message as MimeMessage;
    use Zend\Mime\Part as MimePart;
    use Zend\Mail\Transport\Smtp as SmtpTransport;
    use Zend\Mail\Transport\SmtpOptions;
    use Mail\Config\Config;

    class Base
    {
        private $transport, $text, $html, $to, $subject;

        public function __construct()
        {
            $config     = new Config();
            $transport  = new SmtpTransport();
            $options    = new SmtpOptions(array(
                'name'  => 'mydomain.com',
                'host'  => 'smtp.gmail.com',
                'port'  => 587,
                'connection_class'  => 'login',
                'connection_config' => array(
                    'username'  => $config->username,
                    'password'  => $config->password,
                    'ssl'       => 'tls'
                ),
            ));

            $transport->setOptions($options);
            $this->transport = $transport;

            // This happens in different parts of the code.
            $this->subject( $subject );
            $this->to( $address );
            $this->html( $html );
            $this->text( $text );
            $this->send();
        }

    ?>

到目前为止我已尝试过:

  1. 再次运行脚本
    • 这有不同的结果:有时它会提前中断,有时会进一步打破,但这证明脚本不会在特定地址上中断。我觉得服务器有某种冷却方式:第一次运行就像200个地址一样,但是当我直接重新运行脚本后,它会在20个地址之后中断。当我在一小时后尝试它时,脚本再次在大约200个地址后断开。
  2. 我试图将ssl选项更改为&#39; ssl&#39;以及&#39; 465&#39;的端口选项但这有完全相同的结果。
  3. 有人熟悉这个问题吗?我不确定在哪里寻找问题,也许有人可以帮我推动正确的方向?

    提前致谢!

1 个答案:

答案 0 :(得分:3)

较旧的网站,但可能是你的问题

http://www.serversmtp.com/en/limits-of-gmail-smtp-server

  

这是因为Google对营销人员使用SMTP服务施加了各种限制。这些限制始于对可以接收相同消息的接收者数量的限制。如果Gmail的SMTP服务器检测到您的邮件超过500人,则会停用您的帐户。

相关问题