2012-03-15 51 views
2

我建立一个CakePHP的网站,发送电子邮件这样的:CakePHP的2.1.0:捕获电子邮件输出

$email = new CakeEmail('default'); 
$email->template('test'); 
$email->emailFormat('html'); 
$email->to(array('[email protected]' => '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除了实际发送电子邮件之外,还会在变量中发送电子邮件。这样,我可以在数据库中记录电子邮件正文的确切内容。这是可行的吗?

回答

4

line 50 of the MailTransport class,它看起来实际上是send()函数返回消息和头。因此,而不是:

if($email->send()) { 

尝试:

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

然后,$mySend应该是一个数组:

array('headers' => $headers, 'message' => $message); 
+0

这没有奏效,但非常感谢您的时间! – Nick 2012-03-15 21:13:14

+0

你有错误吗?那么它不起作用呢? (我从$ this-> email-> message()更改为$ email-> message()) – Dave 2012-03-15 21:16:30

+0

(编辑答案我认为应该起作用 - 如果是这样,我会删除我的答案的第一部分) – Dave 2012-03-15 21:24:59

0

多数民众赞成我做什么,我EmailLib: https://github.com/dereuromark/tools/blob/2.0/Lib/EmailLib.php

它记录电子邮件尝试并将电子邮件输出捕获到日志中文件(email_trace.log/tmp/logs/ - 如果您处于调试模式,它将只记录日志(不发送电子邮件 - 这已证明对本地开发非常有用)。

你可以为你的情况写一个类似的包装。 但如果你想把它写回数据库戴夫的方法似乎更适合。