【问题标题】:Form a Excel file (PHPExcel) and mail it as an attachment (PHPMailer) without server storing, possible?形成一个 Excel 文件 (PHPExcel) 并将其作为附件 (PHPMailer) 邮寄,无需服务器存储,可能吗?
【发布时间】:2014-11-26 14:54:47
【问题描述】:

我想形成一个文件 (PHPExcel) 并将其作为附件邮寄 (PHPMailer),而不需要服务器存储,可以吗?

我知道在 PHPExcel 中形成/创建文件并将其作为附件通过 PHPMailer here 发送的可能性。但它通过/通过在服务器的某处写入文件来工作。就服务器资源消耗而言很差。 PHPExcel 允许直接以这种方式输出,而无需保存在服务器上:

$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
ob_end_clean(); 
header('Content-Type: application/vnd.ms-excel');
...
$objWriter->save('php://output'); 

是否可以(以及如何)将其附加到电子邮件中,类似于 save('php://output')?

【问题讨论】:

  • stackoverflow.com/questions/11164167/… 捕获 excel 输出到字符串,使用链接方法附加到电子邮件。但请注意,如果您的 excel 变得“大”,您可能很容易因为内存不足错误而终止脚本。
  • @MarcB,谢谢你的警告,但是如果Excel文件是3M大小,会不会是过载和内存不足的错误?
  • 不知道。这取决于您设置的 php 内存限制。但考虑到您将捕获的字符串复制几次:原始捕获,传递给 phpmailer 以作为附件,然后在构建时再次嵌入到电子邮件中。
  • 只需将您的数据转换为字符串,然后将其传递给您的 PHPMailer 实例上的addStringAttachment。
  • @Synchro,我做到了。你可以把它作为一个答案,我会检查它。

标签: yii phpexcel phpmailer send email-attachments


【解决方案1】:

要在不使用本地文件的情况下发送附件,请使用addStringAttachment() 方法。例如:

$string = $mything->getExcelData();
$mail->addStringAttachment($string, 'myfile.xls');

这将在内部调用PHPMailer::filenameToType(),这将为.xls 扩展设置适当的application/vnd.ms-excel MIME 类型。

一般而言,您可能不需要过多担心执行此操作的内存消耗 - PHPExcel 本身比简单地临时存储此字符串要占用更多内存,因此如果您遇到麻烦,您可能会这样做在你走到这一步之前

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 2010-09-18
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 2013-06-24
    相关资源
    最近更新 更多