带附件的 Laravel 邮件给出 fopen(): null bytes error

问题描述 投票:0回答:2

我正在尝试发送一封附有 pdf 文件的电子邮件。 我检查过,文件确实存在于路径中。我也可以打开它。 我测试了我是否可以使用存储门面的下载功能下载文件并且也有效。

然而,当我在排队的电子邮件中尝试时,每次等待大约 20 秒后都会失败。 这是我得到的错误:

ValueError: fopen(): Argument #1 ($filename) must not contain any null bytes in C:\Users\Gebruiker\PhpstormProjects\FuegoWebsite\vendor\swiftmailer\swiftmailer\lib\classes\Swift\ByteStream\FileByteStream.php:129
Stack trace:

我的电子邮件代码是:

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Storage;

class PdfTestMail extends Mailable
{
    use Queueable, SerializesModels;

    public $orderId;
    public $text;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($orderid, $text)
    {
        $this->orderId = $orderid;
        $this->text = $text;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        $file = Storage::disk('private')->get("factuur_order_".$this->orderId.'.pdf');
        return $this->text('emails.notifyAdmin')
            ->subject('Orderbevestiging #'.$this->orderId)
            ->attach($file, [
                'as' => 'factuur.pdf',
                'mime' => 'application/pdf'
            ]);
    }

}

我尝试以多种方式附加 pdf,包括我用来生成 pdf 的 barryvdh/dompdf 包的直接输出。 什么都没用,我不知道为什么。

laravel email pdf dompdf laravel-mail
2个回答
2
投票

attach
方法需要附加文件的文件名,而不是数据。您可能正在寻找
attachData
方法:

public function attachData($data, $name, array $options = [])

切换到

attachData

->attachData($file, 'factuur.pdf', ['mime' => 'application/pdf'])

Laravel 8.x 文档 - 邮件 - 附件 - 原始数据附件

attachData


0
投票

如果有人在 Laravel 10.x 中使用 Envelope 遇到同样的错误,请参考: https://laravel.com/docs/10.x/mail#attachments

你应该使用:

public function attachments(): array
{
    return [
        Attachment::fromData(fn () => $this->pdf, 'Report.pdf')
                ->withMime('application/pdf'),
    ];
}
© www.soinside.com 2019 - 2024. All rights reserved.