public function testEmailBodyGetterAndSetter() { $emailBody = $this->getMock('Oro\\Bundle\\EmailBundle\\Entity\\EmailBody'); $entity = new EmailAttachment(); $entity->setEmailBody($emailBody); $this->assertTrue($emailBody === $entity->getEmailBody()); }
/** * @dataProvider replaceDataProvider * @param $bodyTemplate * @param array $attachments */ public function testReplace($bodyTemplate, array $attachments) { $email = new Email(); $emailBody = new EmailBody(); $replacements = []; $contentIds = []; foreach ($attachments as $attachmentData) { $attachment = new EmailAttachment(); $emailAttachmentContent = new EmailAttachmentContent(); $emailAttachmentContent->setContent($attachmentData['content'])->setContentTransferEncoding($attachmentData['transfer_encoding']); $attachment->setEmbeddedContentId($attachmentData['content_id'])->setContentType($attachmentData['type'])->setContent($emailAttachmentContent); $emailBody->addAttachment($attachment); $cid = 'cid:' . $attachmentData['content_id']; $contentIds[] = $cid; if ($attachmentData['replace']) { $replacements[] = sprintf('data:%s;base64,%s', $attachmentData['type'], $attachmentData['content']); } else { $replacements[] = $cid; } } $emailBody->setBodyContent(vsprintf($bodyTemplate, $contentIds)); $email->setEmailBody($emailBody); $event = new EmailBodyLoaded($email); $this->listener->replace($event); $this->assertEquals($email, $event->getEmail()); $this->assertEquals(vsprintf($bodyTemplate, $replacements), $event->getEmail()->getEmailBody()->getBodyContent()); }
/** * @param AttachmentOro $attachmentOro * * @return AttachmentEntity */ public function oroToEntity(AttachmentOro $attachmentOro) { $emailAttachmentEntity = new AttachmentEntity(); $emailAttachmentEntity->setFileName($attachmentOro->getFile()->getFilename()); $emailAttachmentContent = new EmailAttachmentContent(); $emailAttachmentContent->setContent(base64_encode($this->filesystem->get($attachmentOro->getFile()->getFilename())->getContent())); $emailAttachmentContent->setContentTransferEncoding('base64'); $emailAttachmentContent->setEmailAttachment($emailAttachmentEntity); $emailAttachmentEntity->setContent($emailAttachmentContent); $emailAttachmentEntity->setContentType($attachmentOro->getFile()->getMimeType()); $emailAttachmentEntity->setFile($attachmentOro->getFile()); $emailAttachmentEntity->setFileName($attachmentOro->getFile()->getOriginalFilename()); return $emailAttachmentEntity; }
/** * @Route("/createpdf", name="ibnab_pmanger_email_createpdf") * @AclAncestor("ibnab_pmanger_email_createpdf") * @Template("OroEmailBundle:Email:update.html.twig") */ public function createPDFAction() { $emailModel = $this->get('oro_email.email.model.builder')->createEmailModel(); $attachmentId = $this->get('request')->get('attachmentId'); $attachment = $this->getDoctrine()->getRepository('OroAttachmentBundle:Attachment')->findOneBy(array('id' => $attachmentId)); $emailAttachment = new EmailAttachment(); $modelEmailAttachment = new ModelEmailAttachment(); $emailAttachment->setFile($attachment->getFile()); $emailAttachment->setFileName($attachment->getFile()->getFileName()); $emailAttachmentContent = new EmailAttachmentContent(); $emailAttachment->setContentType($attachment->getFile()->getMimeType()); $emailAttachment->setContent($emailAttachmentContent); $modelEmailAttachment->setType(ModelEmailAttachment::TYPE_ATTACHMENT); $modelEmailAttachment->setFileSize($attachment->getFile()->getFileSize()); $modelEmailAttachment->setModified($attachment->getFile()->getUpdatedAt()); $modelEmailAttachment->setId($attachment->getId()); $modelEmailAttachment->setEmailAttachment($emailAttachment); //$emailModel->addAttachment($modelEmailAttachment); $emailModel->setAttachmentsAvailable([$modelEmailAttachment]); return $this->process($emailModel); }
/** * Get a response for download the given email attachment * * @Route("/attachment/{id}", name="oro_email_attachment", requirements={"id"="\d+"}) * @AclAncestor("oro_email_view") */ public function attachmentAction(EmailAttachment $entity) { $response = new Response(); $response->headers->set('Content-Type', $entity->getContentType()); $response->headers->set('Content-Disposition', sprintf('attachment; filename="%s"', $entity->getFileName())); $response->headers->set('Pragma', 'no-cache'); $response->headers->set('Expires', '0'); $content = ContentDecoder::decode($entity->getContent()->getValue(), $entity->getContent()->getContentTransferEncoding()); $response->setContent($content); return $response; }
/** * Process inline images. Convert it to embedded attachments and update message body. * * @param \Swift_Message $message * @param EmailModel $model */ protected function processEmbeddedImages(\Swift_Message $message, EmailModel $model) { if ($model->getType() === 'html') { $guesser = ExtensionGuesser::getInstance(); $body = $message->getBody(); $body = preg_replace_callback('/<img(.*)src(\\s*)=(\\s*)["\'](.*)["\']/U', function ($matches) use($message, $guesser, $model) { if (count($matches) === 5) { // 1st match contains any data between '<img' and 'src' parts (e.g. 'width=100') $imgConfig = $matches[1]; // 4th match contains src attribute value $srcData = $matches[4]; if (strpos($srcData, 'data:image') === 0) { list($mime, $content) = explode(';', $srcData); list($encoding, $file) = explode(',', $content); $mime = str_replace('data:', '', $mime); $fileName = sprintf('%s.%s', uniqid(), $guesser->guess($mime)); $swiftAttachment = \Swift_Image::newInstance(ContentDecoder::decode($file, $encoding), $fileName, $mime); /** @var $message \Swift_Message */ $id = $message->embed($swiftAttachment); $attachmentContent = new EmailAttachmentContent(); $attachmentContent->setContent($file); $attachmentContent->setContentTransferEncoding($encoding); $emailAttachment = new EmailAttachment(); $emailAttachment->setEmbeddedContentId($swiftAttachment->getId()); $emailAttachment->setFileName($fileName); $emailAttachment->setContentType($mime); $attachmentContent->setEmailAttachment($emailAttachment); $emailAttachment->setContent($attachmentContent); $emailAttachmentModel = new EmailAttachmentModel(); $emailAttachmentModel->setEmailAttachment($emailAttachment); $model->addAttachment($emailAttachmentModel); return sprintf('<img%ssrc="%s"', $imgConfig, $id); } } }, $body); $message->setBody($body, 'text/html'); } }
/** * @param EmailAttachment $emailAttachment * @param object $entity */ protected function linkAttachmentToEntity(EmailAttachment $emailAttachment, $entity) { $entityClass = ClassUtils::getClass($entity); $attachment = $this->buildAttachmentInstance(); if (!$attachment->supportTarget($entityClass)) { return; } $attachment->setFile($emailAttachment->getFile()); $attachment->setTarget($entity); $this->em->persist($attachment); $this->em->flush(); }
/** * Add email attachment * * @param EmailAttachment $attachment * @return $this */ public function addAttachment(EmailAttachment $attachment) { $this->setHasAttachments(true); $this->attachments[] = $attachment; $attachment->setEmailBody($this); return $this; }
/** * @param EmailAttachment $attachment * @return bool */ protected function supportsAttachment(EmailAttachment $attachment) { return $attachment->getContent()->getContentTransferEncoding() === 'base64' && strpos($attachment->getContentType(), 'image/') === 0; }
/** * Create EmailAttachment entity object * * @param string $fileName The attachment file name * @param string $contentType The attachment content type. It may be any MIME type * @return EmailAttachment */ public function attachment($fileName, $contentType) { $result = new EmailAttachment(); $result->setFileName($fileName)->setContentType($contentType); return $result; }