【发布时间】:2019-02-13 08:09:09
【问题描述】:
我有一个通过 Codeigniter 发送电子邮件的 smtp 电子邮件配置,如下所示:
$config = [
'protocol' => 'smtp',
'smtp_host' => 'ssl://cph.dnet.net.id',
'smtp_port' => 465,
'smtp_timeout' => 50,
'smtp_user' => 'Myemail@domain.com',
'smtp_pass' => 'MyPaSsWoRd',
'smtp_keepalive' => 'TRUE',
'mailtype' => 'html',
'charset' => 'iso-8859-1'
];
$this->email->initialize($config);
如果我只发送几封电子邮件,它总是有效的。但是,当我发送大量电子邮件时,会出现如下错误:
Fatal error: Maximum execution time of 30 seconds exceeded in C:\XAMPP\htdocs\sicuti\system\libraries\Email.php on line 2268
通过将值“max_execution_time”中的“php.ini”编辑为 9999 来解决错误 .但是 codeigniter 显示新的问题是这样的:
fwrite(): SSL operation failed with code 1. OpenSSL Error messages: error:140D00CF:SSL routines:SSL_write:protocol is shutdown
即使我的 smtp 配置是正确的,根据我的 cpanel 中的建议
如果只有几封电子邮件肯定可以工作,但如果出现超过 10 个错误,我应该如何更改才能一次发送多封电子邮件? 谢谢你,我很感激任何回应。
【问题讨论】:
-
第一个错误,虽然可以通过更改 PHP 中的最大执行时间来缓解,但不应认为已完全解决。提高最大执行时间可能会严重影响未来服务器的性能,而且它只会避免 PHP 方面的错误。也就是说,
140D00CF表示 OpenSSL 套接字从未打开或它自行关闭并且不再可用。这很可能是由于套接字打开时间过长。 -
我的建议:你能用秒表计时,这些错误需要多长时间才会出现?如果它始终是相同的秒数,则可能是 SMTP 服务器的指令正在关闭连接。您可以杀死套接字并在每封电子邮件上打开一个新套接字,但这可能会带来大量开销。如果您确实需要循环发送大量电子邮件,我建议您考虑使用邮件递送服务而不是自己发送电子邮件。
标签: php codeigniter email smtp smtpclient