Cakephp 发送电子邮件,附件发送为 0 字节

Posted

技术标签:

【中文标题】Cakephp 发送电子邮件,附件发送为 0 字节【英文标题】:Cakephp send email with attachment sending as 0 byte 【发布时间】:2013-04-02 14:49:07 【问题描述】:

我正在使用 dompdf 动态生成 pdf 文件并将其附加到电子邮件和发送中。但在邮件中,我总是将附件作为 0 字节。我正在 cake 的 tmp 文件夹下创建文件,并且创建成功。我使用 cakephp 2.x 并使用 CakeEmail 发送邮件。 dompdf 文件夹位于插件文件夹中。我已授予 lib/fonts 目录必要的权限。该文件在创建后不会立即作为附件发送。使用 dompdf 时是否会有任何类型的锁定/延迟,即 cakeemail 无法获取文件的内容(但文件存在)?

App::uses('CakePdf', 'CakePdf.Pdf');
$CakePdf = new CakePdf();

$orderDetails = array('1' => 'myproduct');
$CakePdf->viewVars(compact('orderDetails'));      

$CakePdf->template('view_ticket_pdf', 'default');
$filename = TMP . $data['Billing']['order_id'] . '.pdf';
$pdf = $CakePdf->output();
$CakePdf->write( $filename);

$email = new CakeEmail('smtp');
$desc = $email->template('order_mail');
$email->emailFormat('html');
$email->from(array(ADMIN_EMAIL => 'Admin'));
$email->to('user@gmail.com');
$email->attachments(array($filename));
$email->subject('Your order');
$content = $email->send();

我收到 fread() 错误:CakeEmail 中的长度参数必须大于 0。如果我创建一个示例文本文件而不是 pdf,它会附加并且大小将大于 0。我正在使用 github.com/ceeram/CakePdf 插件来创建 pdf。

【问题讨论】:

您确定$path$filename 是正确的吗?如果是这样,您是否在send() 之后删除创建的文件? 感谢您的快速回复。我确定路径是正确的。如果硬编码了以前生成的文件的名称,则它是附加的。我没有删除文件。同样在我的本地机器中,css 和图像显示在 pdf 中,但是当我进入生产环境时,这些都没有显示。会不会影响这个? 我已经实现了类似的东西,当找不到文件时我得到了 0 字节的附件。你检查过日志吗? 你为什么不发布任何代码?也许比仅仅从理论上讨论它可以更好地帮助你。 是否有可能您的文件尚未解锁 - 由于此文件锁定,无法从 CakeEmail 或任何其他类访问它? $CakePdf->write() 之后可能需要一些文件解锁? 【参考方案1】:

同样的问题 ($Email->attachments() does not attach file)。顺便说一句,这不是锁定问题。如果您将 PDF 写入数据库,您可以做一个丑陋的解决方法。看看这里:https://***.com/a/17744761/1145597

【讨论】:

以上是关于Cakephp 发送电子邮件,附件发送为 0 字节的主要内容,如果未能解决你的问题,请参考以下文章

循环发送到多个电子邮件地址时,附件流变为 0 字节

ASP.NET C# 电子邮件附件在发送到多个电子邮件地址时最终变为 0 字节

无法在python中使用MIME发送带有pdf附件的电子邮件

outlook发送不了压缩包提示发送链接

Cakephp 3 尝试使用 gmail 发送电子邮件时出错

作为 System.Net.Mail 的附件的流是 0 字节