从Symfony中的表单将文件附加到电子邮件的正确方法

时间:2014-01-20 09:03:36

标签: symfony swiftmailer

我有一个带文件上传的表单,我想将内容发送给电子邮件收件人而不保存信息。目前我正在做以下事情:

        if ($applyForm->isValid()) {

            $data = $applyForm->getData();
            $file = $applyForm['file']->getData();
            $file->move('file', $file->getClientOriginalName());

            $message = \Swift_Message::newInstance()
                    ->setSubject('Hello')
                    ->setFrom('someone@somehwhere.com')
                    ->setTo('someoneelse@somewhere.com')
                    ->attach(\Swift_Attachment::fromPath('file/'.$file->getClientOriginalName()))
                    ->setBody(
                        $this->renderView(
                            'WebBundle:Email:apply.txt.twig', array(
                                'firstName' => $data['firstName'],
                                'lastName' => $data['lastName'],
                                'email' => $data['email'],
                                'phoneNumber' => $data['phoneNumber'],
                                'comments' => $data['comments']
                        )
                    )
                ;
                $this->get('mailer')->send($message);

                unlink('file/'.$file->getClientOriginalName());

                return $this->redirect($this->generateUrl('Job_Detail', array(
                    'slug' => $job->getSlug(),
                    'id' => $job->getId(),
                    'status' => 'success',
                )));

        }

此代码仅在注销掉链接行时才有效。有没有办法在不保存文件的情况下实现这一目标?

1 个答案:

答案 0 :(得分:0)

SwiftMailer不会立即发送电子邮件以获得最佳性能,将电子邮件保存在内存或文件中,因此如果电子邮件仍然存在于内存或文件中,您不应该删除任何附件,您可以通过设置轻松解决该问题使用简单的PHP脚本进行cron活动:

$files = glob('path/to/files/*'); // get all file names
foreach($files as $file)
{ 
    if(is_file($file))
    unlink($file); // delete file
}