2017-02-06 3 views
1

Мне нужно отправить CSV-файл для каждого пользователя с их детали сделки в то время как запустить хрон в SymfonyСформировать и отправить CSV файл в приложении с Symfony

Мой код, как показано ниже, чтобы генерировать данные в формате 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 в качестве имени файла в приложении, которое не является CSV-файла, а не получить содержимое тела.

Пожалуйста, любое тело может помочь мне this.I оценит лучший ответ

ответ

0

Попробуйте прикреплять файлы к сообщению непосредственно Swift в качестве примера:

$mail = \Swift_Message::newInstance() 
      ->setSubject($subject) 
      ->setFrom($from) 
      ->setTo($recipient) 
      ->setBody($bodyText) 
      ->attach(\Swift_Attachment::fromPath($absolutePathOfTheAttachedFile)); 

EDIT:

Или вы можете присоединить сгенерированные данные в качестве примера:

->attach(
     \Swift_Attachment::newInstance($csvData) 
      ->setFilename('filename.csv') 
      ->setContentType('application/csv') 
     ); 

Надежда эта помощь

+0

Спасибо за помощь, но мне нужно отправить, что сгенерированные данные CSV в качестве прикрепленного файла в формате CSV, который сгенерировал данные хранятся в $ csvData –

+0

привет @HetalGohel попытаться проверить раздел редактирования в ответ, если он удовлетворяет вам нужно. Позвольте мне знать – Matteo

+1

спасибо, да, он работает для меня, как показано ниже, -> attach (\ Swift_Attachment :: newInstance ($ csvData) -> setFilename ('filename.csv') -> setContentType ('application/csv')); –

Смежные вопросы