我知道在stackoverflow上有很多关于这个问题的类似问题,我已经尝试了所有这些问题,但似乎没有一个工作。
我正试图从cron功能发送一封csv附件的电子邮件。我的邮件正在发送,但是没有附件。这是我的代码
$email = new CakeEmail('mandrillSmtp');
$encodedCsv = base64_encode(implode(",",$headers));
//please note that i have debugged encodedCsv. No errors here
$email->subject('Report Test');
$email->from('xxxxx@abc.com');
$email->to('zzzzz@abc.com');
$email->emailFormat('html');
$email->attachments=array(
array(
'content' => $encodedCsv,
'type' => "text/csv",
'name' => 'report.csv'
)
);
$email->send();
嘿,谢谢大家的帮助。我终于让我的代码工作了。感谢ndm提醒我,mandrill的api与CakeEmail完全不同(我一时愣了一下)。我通过使用tmpfile()而不是fopen('php://temp')解决了无法将文件附加到php://temp输出流的问题。由于某种原因,我不能访问写入临时流的文件,即使我有它们的uri不管怎样,这是我的代码。希望能帮到别人
$email = new CakeEmail('mandrillSmtp');
if($handle =tmpfile()){
fputcsv($handle, $headers);
fputcsv($data) ;
}
$fileMeta = stream_get_meta_data($handle);
$uri = $fileMeta['uri'];
$email->subject('Report Test');
$email->from('xxx@abc.com');
$email->to('zzz@abc.com');
$email->emailFormat('html');
$email->attachments(array('test.csv'=>array('mimetype'=>'text/csv','file' => $uri)));
$email->send();
fclose($handle);
如果您试图附加CSV文件,那么您需要CSV文件的路径,我建议您按如下方式创建附件数组:
$email->attachments = array(
array('file' => 'pathToCSVFIle/myCSvFile.csv')
);