gpt4 book ai didi

php - 创建 Excel 文件,然后使用 phpmailer 作为附件发送

转载 作者:行者123 更新时间:2023-12-02 12:12:42 28 4
gpt4 key购买 nike

我已经针对这个问题浏览了多个文档并应用了这些步骤,但到目前为止是徒劳的。我已经编写了 Excel 文件的代码,但我想将其内容放在同一个文件中,并使用 PHPMailer 函数将它们用作 Excel 文件的附件。

下面是我创建Excel文件后使用的代码:

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
$objWriter->save('php://output');

$data = ob_get_contents();

$email->SetFrom('sample@gmail.com', 'Talal Haider'); //Name is optional
$email->Subject = 'Test Mail';
$email->Body = 'Simple Test Email';
$email->AddAddress( 'sample@gmail.com' );
//$email->AddAddress( 'rimsha.cheema@gmail.com' );

$email->AddAttachment($data, 'Inspection_Report.xls' );

if($email->Send()){
echo "Mail Sent";
} else{
echo "Mail Failed";
}

请引导我走向正确的方向。非常感谢

最佳答案

这是输出缓冲问题,而不是电子邮件问题。你正在这样做:

$objWriter->save('php://output');
$data = ob_get_contents();

这表示“将生成的Excel文件直接输出到浏览器”,然后“获取输出缓冲区的内容”。但当第二步发生时,已经太晚了,因为文件已经发送到浏览器,这就是您看到它的原因。

如果您要使用输出缓冲,您需要告诉 PHP 在输出任何内容之前开始捕获输出。 the PHP docs for this function 中对此进行了介绍。 - 这应该是您寻找此类问题的第一个地方。将您的代码更改为:

ob_start();
$objWriter->save('php://output');
$data = ob_get_contents();
ob_end_clean();

现在您已将 Excel 数据存储在字符串中,您可以将其传递给 PHPMailer。在您的代码中,您为此使用了错误的函数。 addAttachment 期望第一个参数是文件的路径,as the documentation says ,但是你给它的是文件的内容,这是行不通的。您需要的方法是 addStringAttachment(),它非常相似,但是 expects binary data as the first param ,像这样:

$email->addStringAttachment($data, 'Inspection_Report.xls');

我还注意到您正在使用 phpExcel,它已过时且不再受支持;它已被 phpSpreadsheet 取代.

这里要吸取的教训是,阅读文档比编写这样的问题并等待别人回答要快得多。

关于php - 创建 Excel 文件,然后使用 phpmailer 作为附件发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52185549/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com