ob_end_clean phpmailer 错误

ob_end_clean error with phpmailer

我正在尝试使用 PHPmailer 发送邮件,但遇到错误并且不知道如何解决这个问题。 我希望有人能帮我解决这个问题。 (在测试阶段,这个设置运行起来很奇怪)

我得到了这个 class 我称之为。 :

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 的错误消息。

Notice: ob_end_clean() [ref.outcontrol]: failed to delete buffer. No buffer to delete

即使我尝试

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

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

我在 class 邮件程序中做错了什么吗? 或者有没有更好的方法构造public函数send?????

请指教, 先谢谢了。

您正在清理缓冲区两次:

$template = ob_get_clean();
ob_end_clean();

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