web-dev-qa-db-ja.com

Codeigniter電子メールエラー処理

CIメールのsend()関数は、trueまたはfalseのみを返します。送信が失敗した理由についてより詳細な理由を取得する方法はありますか? SMTPを使用しています。

19
samxli

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($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 の「ネイティブライブラリの拡張」セクション.

8

メールログを確認できます。メールにエラーが発生した場合は、その理由を記録しておく必要があります。

あなたのシステムにもよりますが、どこにあるかわかりません。

0
martynthewolf