/** * @param ObjectManager $om */ protected function loadEmailsDemo(ObjectManager $om) { $adminUser = $om->getRepository('OroUserBundle:User')->findOneByUsername('admin'); foreach ($this->templates as $index => $template) { $owner = $this->getReference('simple_user'); $simpleUser2 = $this->getReference('simple_user2'); $origin = $this->mailerProcessor->getEmailOrigin($owner->getEmail()); $emailUser = $this->emailEntityBuilder->emailUser($template['Subject'], $owner->getEmail(), $owner->getEmail(), new \DateTime($template['SentAt']), new \DateTime('now'), new \DateTime('now'), Email::NORMAL_IMPORTANCE, "cc{$index}@example.com", "bcc{$index}@example.com"); $emailUser->setFolder($origin->getFolder(FolderType::SENT)); $emailUser->getEmail()->addActivityTarget($owner); $emailUser->getEmail()->addActivityTarget($simpleUser2); $emailUser->getEmail()->setHead(true); $emailUser->setOrganization($owner->getOrganization()); $emailUser->setOwner($owner); $emailBody = $this->emailEntityBuilder->body("Hi,\n" . $template['Text'], false, true); $emailUser->getEmail()->setEmailBody($emailBody); $emailUser->getEmail()->setMessageId(sprintf('<id+&?= %s@%s>', $index, 'bap.migration.generated')); $this->setReference('email_' . ($index + 1), $emailUser->getEmail()); $this->setReference('emailUser_' . ($index + 1), $emailUser); $this->setReference('emailBody_' . ($index + 1), $emailBody); } $emailUser->setOwner($adminUser); $this->setReference('emailUser_for_mass_mark_test', $emailUser); $this->emailEntityBuilder->getBatch()->persist($om); }
/** * @param string $subject * @param string $messageId * @param string $from * @param string|string[] $to * @param string|string[]|null $cc * @param string|string[]|null $bcc * * @return Email */ protected function createEmail($subject, $messageId, $from, $to, $cc = null, $bcc = null) { $origin = $this->mailerProcessor->getEmailOrigin($this->getReference('simple_user')->getEmail()); $folder = $origin->getFolder(FolderType::SENT); $date = new \DateTime('now', new \DateTimeZone('UTC')); $emailUser = $this->emailEntityBuilder->emailUser($subject, $from, $to, $date, $date, $date, Email::NORMAL_IMPORTANCE, $cc, $bcc); $emailUser->setFolder($folder); $emailUser->getEmail()->setMessageId($messageId); return $emailUser->getEmail(); }
/** * {@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); }
/** * @param ObjectManager $om */ protected function loadEmailsDemo(ObjectManager $om) { $contacts = $om->getRepository('OroCRMContactBundle:Contact')->findAll(); $contactCount = count($contacts); for ($i = 0; $i < 100; ++$i) { $contactRandom = rand(0, $contactCount - 1); /** @var Contact $contact */ $contact = $contacts[$contactRandom]; $owner = $contact->getOwner(); $origin = $this->mailerProcessor->getEmailOrigin($owner->getEmail()); $randomTemplate = array_rand($this->templates); $emailUser = $this->addEmailUser($randomTemplate, $owner, $contact, $origin); if ($i % 7 == 0) { $thread = new EmailThread(); $om->persist($thread); $emailUser->getEmail()->setThread($thread); $randomNumber = rand(1, 7); for ($j = 0; $j < $randomNumber; ++$j) { $eu = $this->addEmailUser($randomTemplate, $owner, $contact, $origin); $eu->getEmail()->setSubject('Re: ' . $emailUser->getEmail()->getSubject()); $eu->getEmail()->setThread($thread); $eu->getEmail()->setHead(false); } } $this->emailEntityBuilder->getBatch()->persist($om); } }
/** * 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]); } }
/** * @param ObjectManager $om */ protected function loadEmailsDemo(ObjectManager $om) { $contacts = $om->getRepository('OroCRMContactBundle:Contact')->findAll(); $contactCount = count($contacts); for ($i = 0; $i < 100; ++$i) { $contactRandom = rand(0, $contactCount - 1); /** @var Contact $contact */ $contact = $contacts[$contactRandom]; $owner = $contact->getOwner(); $origin = $this->mailerProcessor->getEmailOrigin($owner->getEmail()); $randomTemplate = array_rand($this->templates); $email = $this->emailEntityBuilder->email($this->templates[$randomTemplate]['Subject'], $owner->getEmail(), $contact->getPrimaryEmail()->getEmail(), new \DateTime('now'), new \DateTime('now'), new \DateTime('now')); $email->addFolder($origin->getFolder(EmailFolder::SENT)); $emailBody = $this->emailEntityBuilder->body("Hi,\n" . $this->templates[$randomTemplate]['Text'], false, true); $email->setEmailBody($emailBody); $email->setMessageId(sprintf('id.%s@%s', uniqid(), '@bap.migration.generated')); $this->emailEntityBuilder->getBatch()->persist($om); } }
/** * @param ObjectManager $om */ protected function loadEmailsDemo(ObjectManager $om) { foreach ($this->templates as $index => $template) { $owner = $this->getReference('simple_user'); $simpleUser2 = $this->getReference('simple_user2'); $origin = $this->mailerProcessor->getEmailOrigin($owner->getEmail()); $emailUser = $this->emailEntityBuilder->emailUser($template['Subject'], $owner->getEmail(), $owner->getEmail(), new \DateTime('now'), new \DateTime('now'), new \DateTime('now'), Email::NORMAL_IMPORTANCE, "cc{$index}@example.com", "bcc{$index}@example.com"); $emailUser->setFolder($origin->getFolder(FolderType::SENT)); $emailUser->getEmail()->addActivityTarget($owner); $emailUser->getEmail()->addActivityTarget($simpleUser2); $emailUser->setOrganization($owner->getOrganization()); $emailUser->setOwner($owner); $emailBody = $this->emailEntityBuilder->body("Hi,\n" . $template['Text'], false, true); $emailUser->getEmail()->setEmailBody($emailBody); $emailUser->getEmail()->setMessageId(sprintf('id.%s@%s', uniqid(), '@bap.migration.generated')); $this->setReference('email_' . ($index + 1), $emailUser->getEmail()); $this->setReference('emailBody_' . ($index + 1), $emailBody); } $this->emailEntityBuilder->getBatch()->persist($om); }
/** * {@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()); } }