/** * @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); }
/** * Process email model sending. * * @param EmailModel $model * @return Email * @throws \Swift_SwiftException */ public function process(EmailModel $model) { $this->assertModel($model); $messageDate = new \DateTime('now', new \DateTimeZone('UTC')); /** @var \Swift_Message $message */ $message = $this->mailer->createMessage(); $message->setDate($messageDate->getTimestamp()); $message->setFrom($this->getAddresses($model->getFrom())); $message->setTo($this->getAddresses($model->getTo())); $message->setSubject($model->getSubject()); $message->setBody($model->getBody(), $model->getType() === 'html' ? 'text/html' : 'text/plain'); $messageId = $message->generateId(); if (!$this->mailer->send($message)) { throw new \Swift_SwiftException('An email was not delivered.'); } $origin = $this->getEmailOrigin($model->getFrom()); $this->emailEntityBuilder->setOrigin($origin); $email = $this->emailEntityBuilder->email($model->getSubject(), $model->getFrom(), $model->getTo(), $messageDate, $messageDate, $messageDate); $email->addFolder($origin->getFolder(FolderType::SENT)); $email->setEmailBody($this->emailEntityBuilder->body($model->getBody(), $model->getType() === 'html', true)); $email->setMessageId($messageId); // persist the email and all related entities such as folders, email addresses etc. $this->emailEntityBuilder->getBatch()->persist($this->getEntityManager()); // associate the email with the target entity if exist if ($model->hasEntity()) { $targetEntity = $this->doctrineHelper->getEntity($model->getEntityClass(), $model->getEntityId()); if ($targetEntity) { $this->emailActivityManager->addAssociation($email, $targetEntity); } } // flush all changes to the database $this->getEntityManager()->flush(); return $email; }
/** * @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(); }
/** * Cleans doctrine's UOF to prevent: * - "eating" too much memory * - storing too many object which cause slowness of sync process * Tracks time when last batch was saved. * Calculates time between batch saves. * * @param bool $isFolderSyncComplete * @param null|EmailFolder $folder */ protected function cleanUp($isFolderSyncComplete = false, $folder = null) { $this->emailEntityBuilder->getBatch()->clear(); /** * Clear entity manager. */ $map = $this->entitiesToClear(); foreach ($map as $entityClass) { $this->em->clear($entityClass); } /** * In case folder sync completed and batch save time exceeded limit - throws exception. */ if ($isFolderSyncComplete && $folder != null && $this->dbBatchSaveTime > 0 && $this->dbBatchSaveTime > self::DB_BATCH_TIME) { throw new SyncFolderTimeoutException($folder->getOrigin()->getId(), $folder->getFullName()); } elseif ($isFolderSyncComplete) { /** * In case folder sync completed without batch save time exceed - reset dbBatchSaveTime. */ $this->dbBatchSaveTime = -1; } else { /** * After batch save - calculate time difference between batches */ if ($this->dbBatchSaveTimestamp !== 0) { $this->dbBatchSaveTime = time() - $this->dbBatchSaveTimestamp; $this->logger->info(sprintf('Batch save time: "%d" seconds.', $this->dbBatchSaveTime)); } } $this->dbBatchSaveTimestamp = time(); }
/** * @param EmailModel $model * @param \DateTime $messageDate * @param EmailOrigin $origin * * @return EmailUser */ protected function createEmailUser(EmailModel $model, $messageDate, EmailOrigin $origin) { $emailUser = $this->emailEntityBuilder->emailUser($model->getSubject(), $model->getFrom(), $model->getTo(), $messageDate, $messageDate, $messageDate, Email::NORMAL_IMPORTANCE, $model->getCc(), $model->getBcc(), $origin->getOwner(), $origin->getOrganization()); if ($origin instanceof UserEmailOrigin && $origin->getMailbox() !== null) { $emailUser->setOwner(null); $emailUser->setMailboxOwner($origin->getMailbox()); } return $emailUser; }
/** * @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); }
/** * @param $randomTemplate * @param User $owner * @param Contact $contact * @param EmailOrigin $origin * * @return EmailUser */ protected function addEmailUser($randomTemplate, $owner, $contact, $origin) { $emailUser = $this->emailEntityBuilder->emailUser($this->templates[$randomTemplate]['Subject'], $owner->getEmail(), $contact->getPrimaryEmail()->getEmail(), new \DateTime('now'), new \DateTime('now'), new \DateTime('now')); $this->setSecurityContext($owner); $emailUser->setFolder($origin->getFolder(FolderType::SENT)); $emailUser->setOwner($owner); $emailUser->setOrganization($owner->getOrganization()); $emailBody = $this->emailEntityBuilder->body("Hi,\n" . $this->templates[$randomTemplate]['Text'], false, true); $emailUser->getEmail()->setEmailBody($emailBody); $emailUser->getEmail()->setMessageId(sprintf('<id.%s@%s', uniqid(), '@bap.migration.generated>')); return $emailUser; }
/** * @param Email $email * @param string $type */ protected function processBodyType(Email $email, $type) { $body = $email->getEmailBody(); if ($body) { if ($email->getId()) { if ($body->getBodyIsText() !== ($type === true)) { throw $this->createInvalidPropertyException('Body Type', $this->emailBodyTypeTransformer->transform($body->getBodyIsText()), $this->emailBodyTypeTransformer->transform($type)); } } else { $body->setBodyIsText($type === true); } } else { $email->setEmailBody($this->emailEntityBuilder->body('', $type !== true, true)); } }
/** * Process email model sending. * * @param EmailModel $model * * @return EmailUser * @throws \Swift_SwiftException */ public function process(EmailModel $model) { $this->assertModel($model); $messageDate = new \DateTime('now', new \DateTimeZone('UTC')); $parentMessageId = $this->getParentMessageId($model); /** @var \Swift_Message $message */ $message = $this->mailer->createMessage(); if ($parentMessageId) { $message->getHeaders()->addTextHeader('References', $parentMessageId); $message->getHeaders()->addTextHeader('In-Reply-To', $parentMessageId); } $message->setDate($messageDate->getTimestamp()); $message->setFrom($this->getAddresses($model->getFrom())); $message->setTo($this->getAddresses($model->getTo())); $message->setCc($this->getAddresses($model->getCc())); $message->setBcc($this->getAddresses($model->getBcc())); $message->setSubject($model->getSubject()); $message->setBody($model->getBody(), $model->getType() === 'html' ? 'text/html' : 'text/plain'); $this->addAttachments($message, $model); $this->processEmbeddedImages($message, $model); $messageId = '<' . $message->generateId() . '>'; if (!$this->mailer->send($message)) { throw new \Swift_SwiftException('An email was not delivered.'); } $origin = $this->getEmailOrigin($model->getFrom()); $emailUser = $this->emailEntityBuilder->emailUser($model->getSubject(), $model->getFrom(), $model->getTo(), $messageDate, $messageDate, $messageDate, Email::NORMAL_IMPORTANCE, $model->getCc(), $model->getBcc(), $origin->getOwner(), $origin->getOrganization()); $emailUser->setFolder($origin->getFolder(FolderType::SENT)); $emailUser->getEmail()->setEmailBody($this->emailEntityBuilder->body($message->getBody(), $model->getType() === 'html', true)); $emailUser->getEmail()->setMessageId($messageId); $emailUser->setSeen(true); if ($parentMessageId) { $emailUser->getEmail()->setRefs($parentMessageId); } // persist the email and all related entities such as folders, email addresses etc. $this->emailEntityBuilder->getBatch()->persist($this->getEntityManager()); $this->persistAttachments($model, $emailUser->getEmail()); // associate the email with the target entity if exist $contexts = $model->getContexts(); foreach ($contexts as $context) { $this->emailActivityManager->addAssociation($emailUser->getEmail(), $context); } // flush all changes to the database $this->getEntityManager()->flush(); $event = new EmailBodyAdded($emailUser->getEmail()); $this->eventDispatcher->dispatch(EmailBodyAdded::NAME, $event); return $emailUser; }
/** * Process form * * @param Email $model * @return bool True on successful processing, false otherwise */ public function process(Email $model) { $result = false; 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 { $messageDate = new \DateTime('now', new \DateTimeZone('UTC')); $message = $this->mailer->createMessage(); $message->setDate($messageDate->getTimestamp()); $message->setFrom($this->getAddresses($model->getFrom())); $message->setTo($this->getAddresses($model->getTo())); $message->setSubject($model->getSubject()); $message->setBody($model->getBody(), 'text/plain'); $sent = $this->mailer->send($message); if (!$sent) { throw new \Swift_SwiftException('An email was not delivered.'); } $origin = $this->em->getRepository('OroEmailBundle:InternalEmailOrigin')->findOneBy(array('name' => InternalEmailOrigin::BAP)); $this->emailEntityBuilder->setOrigin($origin); $email = $this->emailEntityBuilder->email($model->getSubject(), $model->getFrom(), $model->getTo(), $messageDate, $messageDate, $messageDate); $email->setFolder($origin->getFolder(EmailFolder::SENT)); $emailBody = $this->emailEntityBuilder->body($model->getBody(), false, true); $email->setEmailBody($emailBody); $this->emailEntityBuilder->getBatch()->persist($this->em); $this->em->flush(); $result = 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 $result; }
public function testGetBatch() { $this->assertTrue($this->batch === $this->builder->getBatch()); }
/** * Creates email entity and register it in the email entity batch processor * * @param EmailHeader $email * @param EmailFolder $folder * * @return EmailEntity */ protected function addEmail(EmailHeader $email, EmailFolder $folder) { $emailEntity = $this->emailEntityBuilder->email($email->getSubject(), $email->getFrom(), $email->getToRecipients(), $email->getSentAt(), $email->getReceivedAt(), $email->getInternalDate(), $email->getImportance(), $email->getCcRecipients(), $email->getBccRecipients()); $emailEntity->addFolder($folder)->setMessageId($email->getMessageId())->setXMessageId($email->getXMessageId())->setXThreadId($email->getXThreadId()); return $emailEntity; }