Codeigniter Email обработка ошибок - PullRequest
17 голосов
/ 19 июня 2011

Функция отправки электронной почты CI возвращает только true или false. Есть ли способ получить более подробную причину того, почему отправка не удалась? Я использую SMTP.

Ответы [ 3 ]

16 голосов
/ 19 июня 2011

Далее вы можете проверить, что произошло, используя отладчик электронной почты:

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

Из Ссылка класса электронной почты Codeigniter .

Если вам нужен вывод отладчика какстроку, вы можете просто перехватить вывод с помощью выходного буфера :

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

Codeigniter в более поздних версиях требует явного FALSE для параметра $auto_clear параметра email->send() function для того, чтобы не очистить сообщение и отладку, эффективно убивая функцию отладчика, если вы не смогли пройти FALSE.

8 голосов
/ 19 июня 2011

Функция 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;
  }
}

Вы хотели бы поместить это в файл с именем MY_Email.php в вашей папке ./application/libraries. CodeIgniter автоматически распознает существование этого класса и использует его вместо класса по умолчанию.

Когда вы хотите получить список (массив) отладочных сообщений, вы можете сделать это:

$this->email->get_debugger_messages();

Если вы просматриваете сообщения и не хотите включать сообщения отладчика из предыдущих попыток, вы можете сделать это:

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

Ссылка: раздел "Расширение собственных библиотек" https://www.codeigniter.com/user_guide/general/creating_libraries.html.

0 голосов
/ 19 июня 2011

Вы можете проверить свои почтовые журналы. Если почта не работает, у вас должна быть запись с указанием причины.

Я не уверен, где они будут находиться, хотя это зависит от вашей системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...