【问题标题】:CakePHP SMTPTransport keep alive option?CakePHP SMTPTransport 保持活动选项?
【发布时间】:2013-10-19 07:20:36
【问题描述】:

CakePHP SMTPTransport 是否有保持连接活动的选项? 我使用 SMTPTransport 和 smtp 服务器发送大量邮件。 在收到大量邮件后,smtp 服务器拒绝连接并显示错误消息:

SMTP Error: 454 4.7.0 Too many login attempts, please try again later.

我查看了 SmtpTransport 类和发送函数的代码。此函数为每个发送请求连接、验证、发送和断开连接。是否可以保持连接活动?

SmtpTransport.php的发送函数:

public function send(CakeEmail $email) {
    $this->_cakeEmail = $email;

    $this->_connect();
    $this->_auth();
    $this->_sendRcpt();
    $this->_sendData();
    $this->_disconnect();

    return $this->_content;
}

版本:2.4.1

【问题讨论】:

  • 开箱即用不支持,您需要在custom/extended transport 中实现此功能。 ps,请务必提及您的确切 CakePHP 版本!

标签: php email cakephp smtp


【解决方案1】:

谢谢。我已经考虑过这样的事情,并在电子邮件配置“smtpKeepAlive”中实现了扩展的 CakeMail 和 SmtpTransport 以及一个新密钥。如果密钥设置为 true,则 SmtpTransport 不会在每个方法调用上连接、验证和断开连接。发送完所有邮件后,我可以调用新的断开连接方法。

在我看来,将连接保持为默认状态是有意义的,并且只有在必要时才具有关闭连接的方法。 Zend 框架也是如此。

【讨论】:

  • 我之前一直在为此苦苦挣扎,我想我应该发出一个功能请求......虽然它很容易实现,但我发现它有点难看,我还必须创建一个扩展的 CakeEmail 类在重置之间保持传输实例。我不认为将连接作为默认设置持久化是非常必要的,但是有一个选项会很好,并且进一步解耦以便可以轻松地直接使用传输也很整洁。
猜你喜欢
  • 1970-01-01
  • 2015-11-24
  • 1970-01-01
  • 1970-01-01
  • 2020-08-30
  • 1970-01-01
  • 2016-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多