【问题标题】:How do I attach the excel file to the email?如何将excel文件附加到电子邮件中?
【发布时间】:2017-01-20 16:42:40
【问题描述】:

我想我很接近,我只需要在 Mail 中传递 $excelFile,但它一直说它未定义,但是当我传递 $truckstop_post 时它会通过,但数据的格式不正确,因为它没有通过 Excel::创建呢。如何将 \Excel::create 的结果放入 Mail::send??

public function truckstopPost()
{   
    $type = 'csv';



    $truckstop_post = Loadlist::select('pick_city', 'pick_state', 'delivery_city', 'delivery_state', 'trailer_type', 'pick_date', 'load_type', 'length', 'width', 'height', 'weight', 'offer_money', 'special_instructions', 'company_contact', 'contact_phone')->where('urgency', 'OPEN')->orderBy('id', 'desc')->get();

    $excelFile = \Excel::create('itransys', function($excel) use ($truckstop_post) {
        $excel->sheet('mySheet', function($sheet) use ($truckstop_post)
        {
            $sheet->fromArray($truckstop_post);

        });


       $info = Load::find(8500);

       $info = ['info'=>$info];


       Mail::send(['html'=>'email.invoice_email_body'], $info, function($message) use ($info, $excelFile){

        $message->to('mike@gmail.com')->subject('subject');

        $message->from('mike@gmail.com', \Auth::user()->name);

        $message->attachData($excelFile, 'Invoice.csv');

        });


        });

    return back()->with('status', 'You Posted Truckstop!');

}

如果我将 $truckstop_post 传递给 attachData(),这就是结果的样子,但这当然不是格式良好的 csv 文件

【问题讨论】:

  • 到底是什么问题?生成excel?将其附加到电子邮件中?
  • 如何将其附加到电子邮件中,$message->attachData(???, 'Invoice.csv');那么 ->download($type); 会发生什么?
  • 所以从问题中删除与文件附件无关的所有内容。假设您有文件 X 并且想要附加它。
  • 他没有文件 X。他只是在飞行中创建文件并返回路线。那是他的问题。他没有存储文件
  • @Paras 所以问题应该是“如何将路由中的数据存储为文件?”这就是为什么我问到底是什么问题。

标签: php laravel email-attachments maatwebsite-excel


【解决方案1】:

你可以这样做

use Maatwebsite\Excel\Excel as BaseExcel;
use Maatwebsite\Excel\Facades\Excel;

...

$filename = "my_file.csv";

$attachment = Excel::raw(
    new PurchaseOrderLinesExport($this->data), 
    BaseExcel::CSV
);
$subject = "Purchase Order"

return $this->from($this->employee->email)
            ->subject("Purchase Order)
            ->view('emails.view')
            ->attachData($attachment, $filename);

Excel::raw() 方法创建/写入一个临时文件,然后获取其内容并在删除该文件后删除。

如果你使用 laravel,第二个解决方案是这样的:

public function build()
{
    return $this->markdown('emails.report')
        ->attach(
            Excel::download(
                new AuditReport($this->audit), 
                'report.xlsx'
            )->getFile(), ['as' => 'report.xlsx']
        );
}

Excel::download() 返回一个BinaryFileResponse 这就是为什么它不能直接工作,但你可以抓取文件。

【讨论】:

  • 谢谢,Excel::raw(new ExcelExport($this->data), \Maatwebsite\Excel\Excel::XLSX); 结合 attachData 为我工作。
【解决方案2】:
public function post()
{   
    $type = 'csv';

    $create_excel = List::select('pick_city', 'pick_state', 'delivery_city', 'delivery_state')->where('urgency', 'OPEN')->orderBy('id', 'desc')->get()->toArray();

    $excelFile = \Excel::create('itrans', function($excel) use ($create_excel) {
        $excel->sheet('mySheet', function($sheet) use ($create_excel)
        {
            $sheet->fromArray($create_excel);


        });

    })->download($type);

    Mail::send(['html'=>'email.email_body'] function($message) {

     $message->to('example@gmail.com')

    ->subject('Email Subject Line');

    $message->from('daniel@twbb.com', 'Daniel');

    $message->attachData($excelFile, 'Invoice.csv');

});

    return $excelFile;

}

【讨论】:

  • 发布 dd($create_excel) 的输出
  • 你能在它被初始化的那一行之后和 \Excel::create 被调用之前 dd($create_excel) 吗?
猜你喜欢
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
  • 2014-06-25
  • 2018-03-24
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
  • 2015-10-08
相关资源
最近更新 更多