/** * {@inheritdoc} */ public function send(EmailCampaign $campaign, $entity, array $from, array $to) { $entityId = $this->doctrineHelper->getSingleEntityIdentifier($entity); $marketingList = $campaign->getMarketingList(); /** @var EmailTemplate $template */ $template = $campaign->getTransportSettings()->getSettingsBag()->get('template'); list($subjectRendered, $templateRendered) = $this->emailRenderer->compileMessage($template, ['entity' => $entity]); $emailModel = new Email(); $emailModel->setType($template->getType())->setFrom($this->buildFullEmailAddress($from))->setEntityClass($marketingList->getEntity())->setEntityId($entityId)->setTo($to)->setSubject($subjectRendered)->setBody($templateRendered); $this->processor->process($emailModel); }
/** * Process form * * @param Email $model * @return bool True on successful processing, false otherwise */ public function process(Email $model) { $this->form->setData($model); if (in_array($this->request->getMethod(), ['POST', 'PUT'])) { $this->form->submit($this->request); if ($this->form->isValid()) { try { $this->emailProcessor->process($model); return true; } catch (\Exception $ex) { $this->logger->error('Email sending failed.', ['exception' => $ex]); $this->form->addError(new FormError($ex->getMessage())); } } } return false; }
/** * @param EmailModel $email * @param EmailOrigin $origin */ protected function sendEmailModel(EmailModel $email, EmailOrigin $origin = null) { try { $this->emailProcessor->process($email, $origin); } catch (Exception $ex) { $this->logger->error('Email sending failed.', ['exception' => $ex]); } }
/** * {@inheritdoc} */ protected function executeAction($context) { $emailModel = new Email(); $emailModel->setFrom($this->getEmailAddress($context, $this->options['from'])); $to = array(); foreach ($this->options['to'] as $email) { if ($email) { $to[] = $this->getEmailAddress($context, $email); } } $emailModel->setTo($to); $emailModel->setSubject($this->contextAccessor->getValue($context, $this->options['subject'])); $emailModel->setBody($this->contextAccessor->getValue($context, $this->options['body'])); $email = $this->emailProcessor->process($emailModel); if (array_key_exists('attribute', $this->options)) { $this->contextAccessor->setValue($context, $this->options['attribute'], $email); } }
/** * Process form * * @param Email $model * @return bool True on successful processing, false otherwise */ public function process(Email $model) { if ($this->request->getMethod() === 'GET') { $this->initModel($model); } $this->form->setData($model); if (in_array($this->request->getMethod(), array('POST', 'PUT'))) { $this->form->submit($this->request); if ($this->form->isValid()) { try { $this->emailProcessor->process($model); return true; } catch (\Exception $ex) { $this->logger->error('Email sending failed.', array('exception' => $ex)); $this->form->addError(new FormError($this->translator->trans('oro.email.handler.unable_to_send_email'))); } } } return false; }
/** * @param $user * @param bool $withOrigin */ protected function processWithOwner($user, $withOrigin = false) { $message = $this->getMockForAbstractClass('\\Swift_Mime_Message'); $this->mailer->expects($this->once())->method('createMessage')->will($this->returnValue($message)); $this->mailer->expects($this->once())->method('send')->with($message)->will($this->returnValue(true)); $this->emailOwnerProvider->expects($this->once())->method('findEmailOwner')->with($this->em, '*****@*****.**')->will($this->returnValue($user)); $email = $this->getMockBuilder('Oro\\Bundle\\EmailBundle\\Entity\\Email')->disableOriginalConstructor()->getMock(); $this->emailEntityBuilder->expects($this->once())->method('email')->with('test', 'Test User <*****@*****.**>', ['*****@*****.**'])->will($this->returnValue($email)); $body = $this->getMockBuilder('Oro\\Bundle\\EmailBundle\\Entity\\EmailBody')->disableOriginalConstructor()->getMock(); $this->emailEntityBuilder->expects($this->once())->method('body')->with('test body', false, true)->will($this->returnValue($body)); $batch = $this->getMock('Oro\\Bundle\\EmailBundle\\Builder\\EmailEntityBatchInterface'); $this->emailEntityBuilder->expects($this->once())->method('getBatch')->will($this->returnValue($batch)); $batch->expects($this->once())->method('persist')->with($this->identicalTo($this->em)); $this->em->expects($this->once())->method('flush'); if (!$withOrigin) { $this->emailProcessor = $this->getMockBuilder('Oro\\Bundle\\EmailBundle\\Mailer\\Processor')->setConstructorArgs([$this->doctrineHelper, $this->mailer, new EmailAddressHelper(), $this->emailEntityBuilder, $this->emailOwnerProvider, $this->emailActivityManager])->setMethods(['createUserInternalOrigin'])->getMock(); $this->emailProcessor->expects($this->once())->method('createUserInternalOrigin')->with($user)->will($this->returnValue($this->getTestOrigin())); } $model = $this->createEmailModel(array('from' => 'Test User <*****@*****.**>', 'to' => array('*****@*****.**'), 'subject' => 'test', 'body' => 'test body')); $this->emailProcessor->process($model); }
/** * @dataProvider messageDataProvider * @param array $data * @param array $expectedMessageData * @param bool $needConverting * * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function testProcess($data, $expectedMessageData, $needConverting = false) { $message = new \Swift_Message(); $this->emailOriginHelper->expects(self::once())->method('setEmailModel'); $this->emailOriginHelper->expects(self::once())->method('findEmailOrigin')->will(self::returnValue($this->userEmailOrigin)); $this->userEmailOrigin->expects($this->once())->method('isSmtpConfigured')->will($this->returnValue(true)); $this->mailer->expects($this->once())->method('createMessage')->will($this->returnValue($message)); $this->mailer->expects($this->once())->method('send')->with($message)->will($this->returnValue(true)); $emailUser = $this->getMockBuilder('Oro\\Bundle\\EmailBundle\\Entity\\EmailUser')->setMethods(['addFolder', 'getEmail'])->getMock(); $emailUser->expects($this->once())->method('addFolder'); $email = $this->getMockBuilder('Oro\\Bundle\\EmailBundle\\Entity\\Email')->disableOriginalConstructor()->getMock(); $emailUser->expects($this->any())->method('getEmail')->willReturn($email); $this->emailEntityBuilder->expects($this->once())->method('emailUser')->with($data['subject'], $data['from'], $data['to'], $this->isInstanceOf('DateTime'), $this->isInstanceOf('DateTime'), $this->isInstanceOf('DateTime'), \Oro\Bundle\EmailBundle\Entity\Email::NORMAL_IMPORTANCE, $data['cc'], $data['bcc'])->willReturn($emailUser); $body = $this->getMockBuilder('Oro\\Bundle\\EmailBundle\\Entity\\EmailBody')->disableOriginalConstructor()->getMock(); $this->emailEntityBuilder->expects($this->once())->method('body')->will($this->returnValue($body)); $batch = $this->getMock('Oro\\Bundle\\EmailBundle\\Builder\\EmailEntityBatchInterface'); $this->emailEntityBuilder->expects($this->once())->method('getBatch')->will($this->returnValue($batch)); $batch->expects($this->once())->method('persist')->with($this->identicalTo($this->em)); $this->em->expects($this->once())->method('flush'); $email->expects($this->any())->method('getEmailBody')->willReturn($body); if (!empty($data['entityClass']) && !empty($data['entityClass'])) { $targetEntity = new TestUser(); $this->doctrineHelper->expects($this->exactly(0))->method('getEntity')->with($data['entityClass'], $data['entityId'])->will($this->returnValue($targetEntity)); $this->emailActivityManager->expects($this->exactly(0))->method('addAssociation')->with($this->identicalTo($email), $this->identicalTo($targetEntity)); } $model = $this->createEmailModel($data); $this->assertSame($emailUser, $this->emailProcessor->process($model)); $this->assertEquals($expectedMessageData['from'], [$model->getFrom()]); $this->assertEquals($data['cc'], $model->getCc()); $this->assertEquals($data['bcc'], $model->getBcc()); $this->assertEquals($expectedMessageData['subject'], $model->getSubject()); if ($needConverting) { $id = $model->getAttachments()->first()->getEmailAttachment()->getEmbeddedContentId(); $this->assertEquals(sprintf($expectedMessageData['body'], 'cid:' . $id), $message->getBody()); } else { $this->assertEquals($expectedMessageData['body'], $model->getBody()); } }