Codeigniter电子邮件错误处理

ne5o7dgx  于 2022-12-07  发布在  其他
关注(0)|答案(4)|浏览(97)

CI Email send()函数只返回true或false。是否有方法获得发送失败的更详细原因?我使用SMTP。

p5fdfcr1

p5fdfcr11#

您可以使用电子邮件调试器进一步检查发生了什么:

$r = $this->send(FALSE);
if (!$r)
  $this->email->print_debugger()
  ;

Codeigniter Email Class Reference
如果需要调试器输出为字符串,则可以使用output buffer

$errors = array();
... # Loop
$r = $this->send(FALSE);
if (!$r) {
  ob_start();
  $this->email->print_debugger();
  $error = ob_end_clean();
  $errors[] = $error;
}
... # Loop end

较新版本中的Codeigniter要求email->send()函数的$auto_clear参数显式为FALSE,以便不清除消息和调试,如果您未能传递FALSE,则会有效地终止调试器函数。

p1tboqfb

p1tboqfb2#

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;
  }
}

您可能希望将该类放在./application/libraries文件夹中名为MY_Email.php的文件中。CodeIgniter将自动识别该类的存在并使用它而不是默认的类。
当您想要取得两柴消息的清单(数组)时,您可以执行下列动作:

$this->email->get_debugger_messages();

如果您正在循环消息,并且不想包含以前尝试的调试器消息,则可以执行以下操作:

foreach ($email_addresses as $email_address)
{
  $this->email->to($email_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';
}

参考:https://www.codeigniter.com/user_guide/general/creating_libraries.html的“扩展本地库”部分。

vof42yt1

vof42yt13#

代码点火器3:

if ( $this->email->send() ) {
    echo 'Your Email has successfully been sent.';
} else {

    $errors = $this->email->print_debugger();
    print_r($errors);
}
rqenqsqc

rqenqsqc4#

你可以检查你的邮件日志。如果邮件出错了,那么你应该有一个记录说明原因。
我不知道他们将位于虽然这取决于您的系统。

相关问题