Обработка ошибок электронной почты Codeigniter
Функция CI Email send() возвращает true или false. Есть ли способ получить более подробную информацию о том, почему отправка не удалась? Я использую SMTP.
Ответы
Ответ 1
Вы можете дополнительно проверить, что произошло, используя отладчик электронной почты:
$r = $this->send();
if (!$r)
$this->email->print_debugger()
;
Из Справочник класса электронной почты Codeigniter.
Если вам нужен вывод отладчика в виде строки, вы можете просто получить вывод с выходным буфером :
$errors = array();
... # Loop
$r = $this->send();
if (!$r) {
ob_start();
$this->email->print_debugger();
$error = ob_end_clean();
$errors[] = $error;
}
... # Loop end
Ответ 2
Функция print_debugger()
будет работать, но она добавляет заголовок и сообщение электронной почты внизу. Если все, что вам нужно, это массив отладочного сообщения (которое включает в себя как сообщения об успехе, так и сообщения об ошибках), вы можете рассмотреть возможность расширения функциональности класса электронной почты следующим образом:
<?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';
}
Ссылка: раздел "Расширение родных библиотек" http://ellislab.com/codeigniter/user-guide/general/creating_libraries.html.
Ответ 3
Вы можете проверить свои почтовые журналы. Если ошибки почты отсутствуют, тогда вы должны иметь запись, в которой говорится, что там.
Я не уверен, где они будут расположены, хотя это зависит от вашей системы.