web-dev-qa-db-fra.com

Codeigniter Gestion des erreurs de messagerie

La fonction CI Email send () renvoie uniquement vrai ou faux. Existe-t-il un moyen d'obtenir une raison plus détaillée expliquant pourquoi un envoi a échoué? J'utilise SMTP.

19
samxli

Vous pouvez inspecter davantage ce qui s'est passé en utilisant le débogueur de messagerie:

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

À partir de Codeigniter Email Class Reference .

Si vous avez besoin de la sortie du débogueur sous forme de chaîne, vous pouvez simplement attraper la sortie avec un tampon de sortie :

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

Codeigniter dans les versions plus récentes nécessite un FAUX explicite pour le paramètre $auto_clear De la fonction email->send() afin de ne pas effacer le message et le débogage, tuant efficacement le débogueur si vous ne parvenez pas à passer la valeur FALSE.

16
hakre

La fonction print_debugger() fonctionnera mais elle ajoute l'en-tête et le message de l'e-mail en bas. Si tout ce que vous voulez est un tableau du message de débogage (qui comprend à la fois des messages de réussite et d'erreur), vous pouvez envisager d'étendre les fonctionnalités de la classe Email comme suit:

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

Vous souhaitez le placer dans un fichier nommé MY_Email.php dans votre dossier ./application/libraries. CodeIgniter reconnaîtra automatiquement l'existence de cette classe et l'utilisera au lieu de celle par défaut.

Lorsque vous souhaitez obtenir une liste (tableau) de messages de débogage, vous pouvez alors procéder comme suit:

$this->email->get_debugger_messages();

Si vous parcourez les messages et ne souhaitez pas inclure les messages de débogage des tentatives précédentes, vous pouvez le faire:

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

Référence: section "Extension des bibliothèques natives" de https://www.codeigniter.com/user_guide/general/creating_libraries.html .

8
Francois Deschenes

Vous pouvez consulter vos journaux de messagerie. Si le courrier est erroné, vous devriez avoir un dossier indiquant pourquoi.

Je ne sais pas où ils seront situés bien que cela dépende de votre système.

0
martynthewolf