2

シナリオ:データベースキューを使用するように電子メール配信システムを改善しているCodeigniterアプリケーションがいくつかあります。したがって、私のアプリケーションは、データベースに送信する必要のあるすべての電子メールをログに記録します。私は毎分cronジョブを実行して、このデータベースキューを確認し、保留中の電子メールを送信します(必要に応じてサーバーの制限に制限されます)。

それはすべて素晴らしく機能しており、アプリケーションを劇的に改善しました。

この機能の一部は、電子メールが送信されなかったときに記録し、後で再試行することです。プロセスの一環として、後でデバッグするために、送信試行中にエラーメッセージが含まれるようにデータベースを更新します。これは$this->email-> print_debugger()で行います。

もう一度、すべて正常に動作しています(通常)。

問題は、添付ファイルが電子メールに含まれている場合、添付ファイル'data'がprint_debugger()の一部としてダンプされるため、データベースが添付ファイルデータの大きなテキストダンプで破壊されることです。

私が試したこと:そこで、codeigniterのEmail.phpクラスを調べて、print_debugger()関数に添付ファイルデータを含めないようにライブラリを拡張できると考えましたが、関数から返されるエラーは次のようです。実際には、SMTPサーバー自体から別の機能で。エラー時に添付データが届かないようにする方法がわかりません。

質問/課題: SMTPエラーと電子メールヘッダーをキャプチャできる方法を誰かが確認できますが、添付ファイルデータは確認できませんか?電子メールの本文もキャプチャしないことで解決できてうれしいです(とにかくデータベースキューに何があるかを知っているので)。

4

1 に答える 1

1

ライブラリを拡張するだけでよいと思います。これが現在の機能です。

public function print_debugger()
{
    $msg = '';

    if (count($this->_debug_msg) > 0)
    {
        foreach ($this->_debug_msg as $val)
        {
            $msg .= $val;
        }
    }

    $msg .= "<pre>".$this->_header_str."\n".htmlspecialchars($this->_subject)."\n".htmlspecialchars($this->_finalbody).'</pre>';
    return $msg;
}

返されるものには4つの主要な部分があります。

  • _debug_msg-デバッグメッセージ
  • _header_str-メールのヘッダー
  • _subject-メールの件名
  • _finalbody-メッセージの本文添付ファイルのデータ

同様の関数を実装すると_finalbody、必要な出力が得られるはずですが、本文と添付ファイルのデータはありません。

解決策の例を次に示します(クラス「MY_Email」は次の場所にありますapplication/libraries/MY_Email.php):

class MY_Email extends CI_Email
{
    public function my_print_debugger()
    {
        $msg = '';

        if (count($this->_debug_msg) > 0)
        {
            foreach ($this->_debug_msg as $val)
            {
                $msg .= $val;
            }
        }

        $msg .= "<pre>".$this->_header_str."\n".htmlspecialchars($this->_subject)."\n".'</pre>';
        return $msg;
    }
}

クラスのコードを見ると$_body、添付データなしで本文データが含まれている可能性があるため、関数$this->_bodyではなく、を追加してみる価値があると思い$this->_finalbodyます。私はこれをテストしていないので、よくわかりません。

うまくいけば、これが役立ちます!

于 2012-08-27T17:21:44.167 に答える