我需要在symfony
中运行cron时向每个用户发送CSV文件及其交易详情我的代码如下生成csv数据并通过电子邮件发送
用户数组:
$array = array('name','ticket','history','date','flag','created by','transition');
$f = fopen('php://temp', 'w');
$line = $array;
fputcsv($f, $line, ',');
rewind($f);
$stream_get_contents = stream_get_contents($f);
$sentmail = $this->sendEmail($stream_get_contents);
if($sentmail){
return true;
}else{
return false;
}
fclose($f);
unset($f);
public function sendEmail($csvData){
UserId='1';
$em = $this->getContainer()->get('doctrine')->getManager();
$getstaffuser = $em->getRepository('AdminBundle:User')->find($UserId);
if ($getstaffuser) {
if ($getstaffuser->getEmail()) {
$objEmailTemplate = $em->getRepository('BviTemplateBundle:Emailtemplate')->findOneBy(array('emailkey' => 'KEYFIND', 'status' => 'Active'));
if (!$objEmailTemplate) {
$output->writeln("\n####### Email template not present #######\n");
$logger->info("\n####### Email template not present #######\n");
return "NoEmailTemplate";
}
$attachment = chunk_split($csvData);
$multipartSep = '-----' . md5(time()) . '-----';
$bodydata = $objEmailTemplate->getBody();
$body = "--$multipartSep\r\n"
. "Content-Type: text/plain; charset=ISO-8859-1; format=flowed\r\n"
. "Content-Transfer-Encoding: 7bit\r\n"
. "\r\n"
. "$bodydata\r\n"
. "--$multipartSep\r\n"
. "Content-Type: text/csv\r\n"
. "Content-Transfer-Encoding: base64\r\n"
. "Content-Disposition: attachment; filename=\"Website-Report-" . date("F-j-Y") . ".csv\"\r\n"
. "\r\n"
. "$attachment\r\n"
. "--$multipartSep--";
$to = $getstaffuser->getEmail();
$subject = $objEmailTemplate->getSubject();
$mail = \Swift_Message::newInstance()
->setSubject($subject)
->setFrom($this->getContainer()->getParameter('fos_user.registration.confirmation.from_email'))
->setTo($to);
$mail->setBody($body)
->setContentType('multipart/mixed');
$issent = $this->getContainer()->get('mailer')->send($mail);
if ($issent) {
return 'EmailSent';
} else {
return 'EmailNotSent';
}
} else {
return "NoEmailAddress";
}
} else {
return "NoUser";
}
}
但它不起作用,我收到的电子邮件只是附件中的noname as filename,这不是csv文件,也不是获取正文内容。
请任何机构都可以帮助我。我会很感激最好的答案
答案 0 :(得分:0)
尝试使用Swift直接将文件附加到消息中,例如:
$mail = \Swift_Message::newInstance()
->setSubject($subject)
->setFrom($from)
->setTo($recipient)
->setBody($bodyText)
->attach(\Swift_Attachment::fromPath($absolutePathOfTheAttachedFile));
修改强>
或者您可以按生成的数据附加例如:
->attach(
\Swift_Attachment::newInstance($csvData)
->setFilename('filename.csv')
->setContentType('application/csv')
);
希望这个帮助
答案 1 :(得分:0)
自symfony 3.4起,请使用以下代码:
$message = (new \Swift_Message($subject))
->setFrom($from)
->setTo($recipient)
->setBody($bodyText)
->attach(
(new \Swift_Attachment($csvData))
->setFilename('filename.csv')
->setContentType('application/csv')
);