与phpmailer的ob_end_clean错误

时间:2015-12-07 10:41:10

标签: php email html-email phpmailer

我正在尝试发送邮件,但是发送错误并且不知道如何解决此问题。 我希望有人可以帮助我。 (在测试阶段,这种设置工作很奇怪)

我得到了这个课程。 :

class Mailer{

protected $mailer;
public function __construct($mailer) {
    $this->mailer = $mailer;
}

public function send($template, $data, $callback){
    require_once 'core/init.php';
    $message = new Message($this->mailer);

    extract($data);

    ob_start();
    require $template;
    $template = ob_get_clean();
    ob_end_clean();

    $message->body($template);

    call_user_func($callback, $message);//callback message

    $this->mailer->send();
}
}

这是我尝试邮寄的地方,如前所述,在测试中,这可以用于ob_end_clean。

require 'classes/PHPMailer/PHPMailerAutoload.php';
    $mailer = new PHPMailer;
    require 'core/mailsettings.php';
    $mail = new Mailer($mailer);

    $mail->send('mailtemplate/new_bid.php',['name'=>Input::get('name'), 'activation_code' => $randomString1,'servername' => $_SERVER["SERVER_NAME"],'bid' => Input::get('bid'),'bidid' => $bidid, 'email' => Input::get('email')],function($m) {
                    $m->to(Input::get('email'));
                    $m->subject('Your input is in progress, please check your mail to activate.');
                });Redirect::to('index.php');

但是当我尝试发送邮件时,我收到了来自ob_end_clean的错误。

  

注意:ob_end_clean()[ref.outcontrol]:无法删除缓冲区。没有要删除的缓冲区

即使我尝试

 if (ob_get_length() > 0) { ob_end_clean(); }

按照此处的建议(failed to delete buffer. No buffer to delete)。

在Mailer班上有什么我做错了吗? 或者是否有更好的方法来构建公共函数send ????

请告知, 先谢谢。

1 个答案:

答案 0 :(得分:2)

您正在清理缓冲区两次:

$template = ob_get_clean();
ob_end_clean();

第二次调用会抛出错误,因为第一次调用已经删除了缓冲区。