Laravel 5.3 - 将多个文件附加到Mailables

时间:2017-03-17 02:49:21

标签: laravel laravel-5 laravel-5.3 laravel-mail

如何将多个文件附加到laravel 5.3 mailable?

我可以在我的mailable构建方法上使用->attach($form->filePath)轻松地附加单个文件。但是,当我将表单字段更改为数组时,我收到以下错误:

basename() expects parameter 1 to be string, array given

我在堆栈上搜索文档以及各种搜索字词无济于事。任何帮助将不胜感激。

构建方法:

public function build()
{
    return $this->subject('Employment Application')
                ->attach($this->employment['portfolio_samples'])
                ->view('emails.employment_mailview');
}

来自控制器的邮件呼叫:

Mail::to(config('mail.from.address'))->send(new Employment($employment));

1 个答案:

答案 0 :(得分:18)

您应该将生成的电子邮件存储在变量中,只需添加多个附件,如下所示:

public function build()
{
    $email = $this->view('emails.employment_mailview')->subject('Employment Application');

    // $attachments is an array with file paths of attachments
    foreach($attachments as $filePath){
        $email->attach($filePath);
    }
    return $email;
}

在这种情况下,您的$attachments变量应该是一个包含文件路径的数组:

$attachments = [
    // first attachment
    '/path/to/file1',

    // second attachment
    '/path/to/file2',
    ...
];

<小时/> 此外,您不仅可以通过文件路径附加文件,还可以使用MIME类型和所需的文件名附加文件,请参阅有关attachment方法的第二种使用情况的文档:https://laravel.com/docs/5.4/mail#attachments

例如,您的$attachments数组可以是这样的:

$attachments = [
    // first attachment
    'path/to/file1' => [
        'as' => 'file1.pdf',
        'mime' => 'application/pdf',
    ],

    // second attachment
    'path/to/file12' => [
        'as' => 'file2.pdf',
        'mime' => 'application/pdf',
    ],

    ...
];

从这个数组中附加文件后:

// $attachments is an array with file paths of attachments
foreach($attachments as $filePath => $fileParameters){
    $email->attach($filePath, $fileParameters);
}