示例#1
0
 /**
  * @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();
 }
示例#3
0
 /**
  * {@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);
 }
示例#4
0
 /**
  * @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);
     }
 }
示例#5
0
 /**
  * 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]);
     }
 }
示例#7
0
 /**
  * @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);
     }
 }
示例#8
0
 /**
  * @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);
 }
示例#9
0
 /**
  * {@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);
     }
 }
示例#10
0
 /**
  * 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;
 }
示例#11
0
 /**
  * @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);
 }
示例#12
0
 /**
  * @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());
     }
 }