Laravel 电子邮件附加文本文件而不实际创建文件

Laravel email attach text file without actually creating the file

使用 Laravel,有没有办法在不实际创建文件的情况下将文件附加到电子邮件?意思是,我可以让电子邮件包含一个文本文件附件,而不是实际将文件保存在某个地方并告诉 Laravel 文件的路径,我可以只传递 Laravel 我想要的数据吗包含在文件中?

我认为执行此操作的方法与内存流有关,但我不确定如何实际实现它。

我找到了答案here

只是

$message->attachData($StringValue, "Samplefilename.txt");

我也发现了这个问题,我需要将 csv 文件作为附件发送,而无需将文件写入任何人都可以 public 访问的 public 目录。此方法也可以修改为发送文本文件:

发送 txt 文件:

$filename =  'launch_codes.txt';
$file = fopen('php://temp', 'w+');
fwrite($file,"nuclear_arsenal: swordfish");
rewind($file);
Mail::send('emails.launch_codes', [], function($message) use($file, $filename)
        {
            $message->to('please_not_trump@not-that-secure.gov')
                    ->subject('Confidential Data');
            $message->attachData(stream_get_contents($file), $filename);
        });

fclose($file);

发送 csv 文件:

        $filename =  'launch_codes.csv';
        $file = fopen('php://temp', 'w+');
        $column_headers = ['Weapon', 'Launch Code'];
        fputcsv($file, $column_headers);
        fputcsv($file, [
           'nuclear_arsenal','swordfish'                        
        ]);

        rewind($file);

        Mail::send('emails.launch_codes', [], function($message) use($file, $filename)
        {
            $message->to('please_not_trump@not-that-secure.gov')
                    ->subject('Confidential Data');
            $message->attachData(stream_get_contents($file), $filename);
        });

        fclose($file);