使用CodeIgniter发送由dompdf生成的PDF文件的电子邮件

5

我有一个PDF文件,它是从Codeigniter中的HTML视图生成的,现在我想把它发送到我的电子邮件,但问题是当我发邮件时,$pdf中显示有一个字符串,但是却为空。以下是整个Codeigniter函数。

public function generatePDF()
{
    require_once(APPPATH.'third_party/dompdf/dompdf_config.inc.php');

    $dompdf = new Dompdf();
    $msg = $this->load->view('credit_agreement_view', '', true);
    $html = mb_convert_encoding($msg, 'HTML-ENTITIES', 'UTF-8');
    $dompdf->load_html($html);
    $paper_orientation = 'Potrait';
    $dompdf->set_paper($paper_orientation);

    // Render the HTML as PDF
    $dompdf->render();
    $pdf = $dompdf->output();

    // sending the pdf to email
    $this->load->library('email');
    $config['protocol'] = 'smtp';
    $config['smtp_host'] = 'ssl://smtp.gmail.com';
    $config['smtp_port']    = '465';
    $config['smtp_timeout'] = '7';
    $config['smtp_user']    = 'support@aurorax.co';
    $config['smtp_pass']    = '#######';
    $config['charset']    = 'utf-8';
    $config['newline']    = "\r\n";
    $config['mailtype'] = 'text'; // or html
    $config['validation'] = TRUE; // bool whether to validate email or not    
    $this->email->initialize($config);

    $this->email->from('support@aurorax.co', 'aurora exchange');
    $this->email->to('masnad@aurorax.co');
    $this->email->subject('pdf');
    $this->email->attach($pdf);
    $this->email->message('Hello!');  

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

1
先保存,然后使用绝对路径附加。 - Maninderpreet Singh
将您的这一行代码 $this->email->attach($pdf); 修改为 $this->email->string_attach($pdf, 'myfile.pdf', 'application/pdf'); - Maninderpreet Singh
@ManinderpreetSingh,你看到我的上一条评论了吗? - Masnad Nihit
成功发送电子邮件后,您可以取消链接已保存的文件。 - Tpojka
@Tpojka,我真的不想把它保存到计算机或任何地方,所以有没有办法将其保存到 MySQL 数据库,然后发送电子邮件? 一定有方法,但我正在搜索却找不到。 - Masnad Nihit
显示剩余7条评论
2个回答

3
你的代码帮助我实现了在不将pdf附件保存到服务器上的情况下发送它们。我没有调用渲染方法。
    //load dompdf library
    $this->load->library('PHPPdf');
    $objPHPPdf = new PHPPdf();
    $objPHPPdf->loadHtml($attachment, 'UTF-8');
    // (Optional) Setup the paper size and orientation
    $objPHPPdf->setPaper('A4', 'portrait');
    // Render the HTML as PDF
    $objPHPPdf->render();
    $pdf = $objPHPPdf->output();
    $this->load->library('email');
    $this->email->initialize($this->config->item("email_config"));
    $from = $this->config->item("email_from");
    $this->email->from($from["from"], $from["from_name"]);
    $this->email->to($to);
    $this->email->subject('Sample');
    $this->email->message('Sample message');
    $this->email->attach($pdf, 'application/pdf', "Pdf File " . date("m-d H-i-s") . ".pdf", false);

    $r = $this->email->send();
    if (!$r) {
        // "Failed to send email:" . $this->email->print_debugger(array("header")));
    } else {
        // "Email sent"
    }

这很不错! - Masnad Nihit

1
实际上,要发送附件,您需要生成PDF文件,而不仅仅是将其呈现为PDF在浏览器中。在$dompdf->render();行之后添加以下代码: $dompdf->stream("attachment.pdf"); 在附加时使用此附件文件的绝对路径。您可以在发送电子邮件后随时取消链接(删除)附件。

是的,但我不想将电子邮件存储在某个路径中,我要么将其存储在数据库中,要么作为电子邮件发送,因此对我来说,不将其存储在驱动器中是必须的。 - Masnad Nihit
@MasnadNihit 你正在使用哪个版本的CodeIgniter?? - Asif Rahaman
2.1.4 是版本号。 - Masnad Nihit
我认为不存在任何接受原始数据的方法...你必须扩展电子邮件类并覆盖现有方法。希望这个链接能帮到你... https://dev59.com/t3I95IYBdhLWcg3wzRTv - Asif Rahaman
但是有没有一种方法可以将它保存到数据库中,然后再导出呢? - Masnad Nihit
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接