CakePHP 2.1.0: захват вывода электронной почты - PullRequest
2 голосов
/ 16 марта 2012

Я создаю веб-сайт CakePHP, который отправляет электронное письмо, подобное этому:

$email = new CakeEmail('default');
$email->template('test');
$email->emailFormat('html');
$email->to(array('john_doe@example.com' => 'John Doe'));
$email->subject('Test E-mail');
$email->helpers(array('Html', 'Text'));
$email->viewVars(
    array(
        ...
    )
);

if ($email->send()) {
    $this->Session->setFlash('The e-mail was sent!', 'default', array('class' => 'alert alert-success'));
}
else {
    $this->Session->setFlash('An unexpected error occurred while sending the e-mail.', 'default', array('class' => 'alert alert-error'));
}

Я хотел бы иметь возможность захватывать HTML, представленный электронной почтой, в переменной в дополнениена самом деле отправка электронной почты.Таким образом, я могу записать в базу данных точное содержание тела письма.Это выполнимо?

Ответы [ 2 ]

4 голосов
/ 16 марта 2012

В строке 50 класса MailTransport , похоже, что действительная функция send() возвращает сообщение и заголовок.Поэтому вместо:

if($email->send()) {

Попробуйте:

$mySend = $email->send();
if($mySend) {
    //...

Тогда $mySend должен быть массивом:

array('headers' => $headers, 'message' => $message);
0 голосов
/ 16 марта 2012

Вот что я делаю в своей электронной почте: https://github.com/dereuromark/tools/blob/2.0/Lib/EmailLib.php

он регистрирует попытки электронной почты и записывает вывод электронной почты в файл журнала (email_trace.log) в /tmp/logs/ - если вы находитесь в режиме отладки, он будет только регистрировать (никакие электронные письма не отправлены - это оказалось весьма полезным для локального удаления) ).

вы можете написать аналогичную оболочку для вашего случая. но если вы хотите записать его обратно в подход БД, Дэйв, похоже, подойдет лучше.

...