如何在 laravel 4.2 中将 csv 作为电子邮件附件发送?
How to send csv as email attachment in laravel 4.2?
我想在 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 文件。
那么我怎样才能让它作为电子邮件附件发送呢?
您应该生成 CSV 并将其保存在 public/some-folder
中,然后从那里附加它。而不是生成 CSV 并下载它。
我找到了一个简单的解决方案。
首先,我在目标文件夹中手动创建了一个空白 .csv
文件。
假设在目录 public/uploads/report.csv
.
中创建了一个名为 "Report.csv"
的文件
那就简单了。
我用以下命令打开了写入内容的文件--
$fp = fopen(public_path('uploads/report.csv'), 'w');
这里w
用于擦除文件最后的内容,允许插入新数据
现在我使用以下行将文件附加到邮件
define('CSV_Ddefine('CSV_DIR', public_path('uploads'));
if (!is_dir(CSV_DIR)){
mkdir(CSV_DIR, 0755, true);
}
$outputName = str_random(10);
$csvPath = CSV_DIR.'/report.csv';
foreach($emails as $email) {
Mail::send('admin/report/mailscheduledreport', array('filename' => $filename), function($message) use ($csvPath, $email)
{
$message->from('info@abc.com', 'Reports');
$message->to($email)->subject('Reports');
$message->attach($csvPath);
});
}
我想在 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 文件。 那么我怎样才能让它作为电子邮件附件发送呢?
您应该生成 CSV 并将其保存在 public/some-folder
中,然后从那里附加它。而不是生成 CSV 并下载它。
我找到了一个简单的解决方案。
首先,我在目标文件夹中手动创建了一个空白 .csv
文件。
假设在目录 public/uploads/report.csv
.
"Report.csv"
的文件
那就简单了。
我用以下命令打开了写入内容的文件--
$fp = fopen(public_path('uploads/report.csv'), 'w');
这里w
用于擦除文件最后的内容,允许插入新数据
现在我使用以下行将文件附加到邮件
define('CSV_Ddefine('CSV_DIR', public_path('uploads'));
if (!is_dir(CSV_DIR)){
mkdir(CSV_DIR, 0755, true);
}
$outputName = str_random(10);
$csvPath = CSV_DIR.'/report.csv';
foreach($emails as $email) {
Mail::send('admin/report/mailscheduledreport', array('filename' => $filename), function($message) use ($csvPath, $email)
{
$message->from('info@abc.com', 'Reports');
$message->to($email)->subject('Reports');
$message->attach($csvPath);
});
}