sam*_*xli 18 php email smtp codeigniter
CI Email send()函数仅返回true或false.有没有办法得到更详细的原因,为什么发送失败?我正在使用SMTP.
hak*_*kre 17
您可以使用电子邮件调试器进一步检查发生的情况:
$r = $this->send(FALSE);
if (!$r)
$this->email->print_debugger()
;
Run Code Online (Sandbox Code Playgroud)
如果需要将调试器输出作为字符串,则可以使用输出缓冲区捕获输出:
$errors = array();
... # Loop
$r = $this->send(FALSE);
if (!$r) {
ob_start();
$this->email->print_debugger();
$error = ob_end_clean();
$errors[] = $error;
}
... # Loop end
Run Code Online (Sandbox Code Playgroud)
笨在最近的版本需要的明确FALSE $auto_clear 的参数email->send()功能,以不清除消息和调试,可有效查杀在线调试功能,如果你不及格FALSE.
该print_debugger()功能将起作用,但它会在底部附加电子邮件标题和消息.如果你想要的只是调试消息的数组(包括成功和错误消息),你可以考虑扩展Email类的功能,如下所示:
<?php
class MY_Email extends CI_Email
{
public function clear_debugger_messages()
{
$this->_debug_msg = array();
}
public function get_debugger_messages()
{
return $this->_debug_msg;
}
}
Run Code Online (Sandbox Code Playgroud)
您需要将它放在./application/libraries文件夹中名为MY_Email.php的文件中.CodeIgniter将自动识别此类的存在并使用它而不是它的默认类.
如果要获取调试消息的列表(数组),则可以执行以下操作:
$this->email->get_debugger_messages();
Run Code Online (Sandbox Code Playgroud)
如果您正在循环浏览消息并且不想包含先前尝试的调试器消息,则可以执行以下操作:
foreach ( $email_addresses as $email_address )
{
$this->email->to($emai_address);
if ( ! $this->email->send() )
{
echo 'Failed';
// Loop through the debugger messages.
foreach ( $this->email->get_debugger_messages() as $debugger_message )
echo $debugger_message;
// Remove the debugger messages as they're not necessary for the next attempt.
$this->email->clear_debugger_messages();
}
else
echo 'Sent';
}
Run Code Online (Sandbox Code Playgroud)
参考:https://www.codeigniter.com/user_guide/general/creating_libraries.html的"扩展本机库"部分.
| 归档时间: |
|
| 查看次数: |
53221 次 |
| 最近记录: |