【发布时间】:2015-04-30 21:26:15
【问题描述】:
我想在 laravel 4.2 中将 CSV 文件作为电子邮件附件发送 我已经生成了一个 csv 文件,但没有任何线索可以通过电子邮件发送。
这是调用 csv 方法的控制器 --
$this->report->generateCSV($schedule_type->name,$schedule_type->date_from,$schedule_type->date_to,$schedule_type->company_name,$csvHeader,$reportData,$filename.'.csv',';',$array);
这是产生输出的函数
public function generateCSV($reportname,$startdate,$enddate,$companyname,$csvHeader,$csvDataArray,$filename='report.csv',$delimiter=';',$elementsOfCSV = array()){
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename='.$filename);
$fp = fopen('php://output', 'w');
fputcsv($fp, array(' ', ' ' ), $delimiter);
fputcsv($fp, array(' ','Report Name : ',$reportname), $delimiter);
fputcsv($fp, array(' ','Run date : ',date('Y-m-d')), $delimiter);
fputcsv($fp, array(' ','Date period being reported : ',$startdate.' to '.$enddate), $delimiter);
if($companyname)
fputcsv($fp, array(' ','Client Company : ',$companyname), $delimiter);
fputcsv($fp, array(' ',' ',' '), $delimi ter);
fputcsv($fp, array(' ',' ',' '), $delimiter);
fputcsv($fp, $csvHeader, $delimiter);
$i= $avgTimeTaken = $avgPercentage = 0;
$totalRow = count($csvDataArray);
if($totalRow > 0){
foreach ($csvDataArray as $k=>$data) {
$csvData[$k][$i] = ' ';
foreach ($data as $key=>$line) {
if(in_array($key, $elementsOfCSV)){
if($key=='time_taken'){
$line = gmdate("H:i:s", $line);
}
$csvData[$k][$key] = $line;
}
}
fputcsv($fp, $csvData[$k], $delimiter);
$i++;
}
}
fclose($fp);
}
我知道如何发送附件。我用它作为附件发送 PDF 文件
Mail::send('site/user/mailcertificate', array('key' => 'value'), function($message) use ($pdfPath, $userDetails)
{
$message->from('abc@gmail.com', 'Message Subject');
$message->to($userDetails['userEmail'], $userDetails['userName'])->subject('Assessment Certificate');
$message->attach($pdfPath);
}
但是这里写的函数强制我下载 CSV 文件。 那么我怎样才能让它作为电子邮件附件发送呢?
【问题讨论】:
标签: php csv laravel-4 email-attachments