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

时间:2015-02-04 03:42:48

标签: php laravel-4

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

我认为这样做的方法与内存流有关,但我不确定如何实现它。

2 个答案:

答案 0 :(得分:6)

我找到了答案here

它只是

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

答案 1 :(得分:1)

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

发送一个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);