生成CSV文件并通过电子邮件laravel直接发送

生成CSV文件并通过电子邮件laravel直接发送,laravel,csv,email,Laravel,Csv,Email,Halo伙计们,我是拉威尔的新人。我现在正在使用laravel 6。现在我正在生成CSV文件并通过电子邮件发送 问题是: 我仍然不知道如何生成CSV文件并将其放入服务器文件夹。假设我想将CSV文件保存到我的服务器文件夹public/export中/ 如何通过电子邮件发送并生成CSV文件 这就是我所做的 $reports = User::all()->get(); $rows = []; foreach ($reports as $key =&

Halo伙计们,我是拉威尔的新人。我现在正在使用laravel 6。现在我正在生成CSV文件并通过电子邮件发送

问题是:

  • 我仍然不知道如何生成CSV文件并将其放入服务器文件夹。假设我想将CSV文件保存到我的服务器文件夹public/export中/
  • 如何通过电子邮件发送并生成CSV文件
  • 这就是我所做的

            $reports = User::all()->get();
            $rows = [];
            foreach ($reports as $key => $value) {
                $rows[$key]['id'] = $value->social_media_id;
                $rows[$key]['name'] = $value->name;
                $rows[$key]['address'] = $value->address;
                $rows[$key]['phone'] = $value->phone; 
            } 
    
            $fileName = 'file.csv';
            $headers = [
                "Content-type" => "text/csv",
                "Content-Disposition" => "attachment; filename=" . $fileName,
                "Pragma" => "no-cache",
                "Cache-Control" => "must-revalidate, post-check=0, pre-check=0",
                "Expires" => "0"
            ];
    
            $columnNames = [
                'ID',
                'name',
                'address',
                'phone'
            ];
            $callback = function() use ($columnNames, $rows ) {
                $file = fopen('php://output', 'w');
                fputcsv($file, $columnNames);
                foreach ($rows as $row) {
                    fputcsv($file, $row);
                }
                fclose($file);
            };
            return response()->stream($callback, 200, $headers));
    
    如何修改此代码以将生成的CSV文件存储在我的服务器文件夹public/export/

    那么我如何通过电子邮件发送呢

    请给我一些建议

  • fputcsv()将行格式设置为CSV,因此此处不需要$headers。你也不需要php://output 因为它是在不需要本地保存时发送到浏览器的。所以代码看起来像这样:
  • 
    $reports=User::all()->get();
    $fileName='file.csv';
    $columnNames=[
    “ID”,
    “姓名”,
    "地址",,
    “电话”
    ];
    $file=fopen('public/export/'。$fileName,'w');
    fputcsv($file,$columnNames);
    foreach($reports作为$report报告){
    fputcsv($文件[
    $report->id,
    $report->name,
    $report->address,
    $report->phone,
    ]);
    }
    fclose($文件);
    
  • 使用此csv发送电子邮件的最快方式:
  • 
    邮件::发送('your.email.blade.layout',[],函数($message)使用($fileName)
    {
    $message->to($message)example@gmail.com“)->主题(“CSV电子邮件”);
    $message->attach('public/export/'。$fileName);
    });
    
    但是,如果您将通过mailable类(docs:)发送,则会更好

    另外,不要忘记您没有唯一的文件名,因此每次都会被覆盖

  • fputcsv()将行格式设置为CSV,因此此处不需要$headers。你也不需要php://output 因为它是在不需要本地保存时发送到浏览器的。所以代码看起来像这样:
  • 
    $reports=User::all()->get();
    $fileName='file.csv';
    $columnNames=[
    “ID”,
    “姓名”,
    "地址",,
    “电话”
    ];
    $file=fopen('public/export/'。$fileName,'w');
    fputcsv($file,$columnNames);
    foreach($reports作为$report报告){
    fputcsv($文件[
    $report->id,
    $report->name,
    $report->address,
    $report->phone,
    ]);
    }
    fclose($文件);
    
  • 使用此csv发送电子邮件的最快方式:
  • 
    邮件::发送('your.email.blade.layout',[],函数($message)使用($fileName)
    {
    $message->to($message)example@gmail.com“)->主题(“CSV电子邮件”);
    $message->attach('public/export/'。$fileName);
    });
    
    但是,如果您将通过mailable类(docs:)发送,则会更好


    另外,不要忘记您没有唯一的文件名,因此每次都会被覆盖。

    找到了吗?还是没有解决问题?找到了还是没有解决问题
    
    
        $reports = User::all()->get();
        $fileName = 'file.csv';
        $columnNames = [
            'ID',
            'name',
            'address',
            'phone'
        ];
        
        $file = fopen('public/export/' . $fileName, 'w');
        fputcsv($file, $columnNames);
        
        foreach ($reports as $report) {
            fputcsv($file, [
                 $report->id,
                 $report->name,
                 $report->address,
                 $report->phone,
            ]);
        }
        
        fclose($file);
    
    
    
        Mail::send('your.email.blade.layout', [], function($message) use ($fileName)
        {
            $message->to('example@gmail.com')->subject('CSV email');
            $message->attach('public/export/' . $fileName);
        });