CakeEmail のログに件名、宛先などを追加する
CakePHP2 でのメール送信は CakeEmail を使っているのですが、メールのログを見てみると、件名や宛先(to,cc,bcc)が入っていませんでした。
残しておきたいので以下のようにしました。
まずは、app/Lib/Network/Email フォルダを作成して AppCakeEmail.php というファイル名で下記のコードを保存します。
(コアファイルの Network/Email/CakeEmail.phpの send() 関数をコピーしたものにちょっと手を加えてます)
<?php App::uses('CakeEmail', 'Network/Email'); class AppCakeEmail extends CakeEmail { public function send($content = null) { if (empty($this->_from)) { throw new SocketException(__d('cake_dev', 'From is not specified.')); } if (empty($this->_to) && empty($this->_cc) && empty($this->_bcc)) { throw new SocketException(__d('cake_dev', 'You need to specify at least one destination for to, cc or bcc.')); } if (is_array($content)) { $content = implode("\n", $content) . "\n"; } $this->_textMessage = $this->_htmlMessage = ''; $this->_createBoundary(); $this->_message = $this->_render($this->_wrap($content)); $contents = $this->transportClass()->send($this); if (!empty($this->_config['log'])) { $level = LOG_DEBUG; if ($this->_config['log'] !== true) { $level = $this->_config['log']; } $to = $cc = $bcc = ''; if (!empty($this->_to)) { $to = PHP_EOL . 'To:' . implode(',', $this->_to); } if (!empty($this->_cc)) { $cc = PHP_EOL . 'Cc:' . implode(',', $this->_cc); } if (!empty($this->_bcc)) { $bcc = PHP_EOL . 'Bcc:' . implode(',', $this->_bcc); } if (!empty($this->_subject)) { $subject = PHP_EOL . 'Subject:' . $this->_subject; } CakeLog::write($level, $to . $cc . $bcc . $subject . PHP_EOL . $contents['headers'] . PHP_EOL . $contents['message']); } return $contents; } }
あとは、CakeEmail を使用する時に app/Lib/Network/Email/AppCakeEmail.php を読み込んで使えばOKです!
<?php public function sendMail() { App::uses('AppCakeEmail', 'Lib/Network/Email'); $email = new AppCakeEmail('default'); $email->config(array('log' => 'emails')); ->to('noreply@example.com') ->send(); }
本当は別名で継承してというやり方ではなく、 CakeEmail のままで出来れば一番いいのですがわかりませんでした。
何か方法があれば教えてください!!
以上。