Ejemplo n.º 1
0
 /**
  * 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;
 }
Ejemplo n.º 2
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);
     }
 }
Ejemplo n.º 3
0
 public function testEmail()
 {
     $this->initEmailStorage();
     $date = new \DateTime('now');
     $email = $this->builder->email('testSubject', '"Test" <*****@*****.**>', '"Test1" <*****@*****.**>', $date, $date, $date, Email::NORMAL_IMPORTANCE, array('"Test2" <*****@*****.**>', '*****@*****.**'));
     $this->assertEquals('testSubject', $email->getSubject());
     $this->assertEquals('"Test" <*****@*****.**>', $email->getFromName());
     $this->assertEquals('*****@*****.**', $email->getFromEmailAddress()->getEmail());
     $this->assertEquals($date, $email->getSentAt());
     $this->assertEquals($date, $email->getReceivedAt());
     $this->assertEquals($date, $email->getInternalDate());
     $this->assertEquals(Email::NORMAL_IMPORTANCE, $email->getImportance());
     $to = $email->getRecipients(EmailRecipient::TO);
     $this->assertEquals('"Test1" <*****@*****.**>', $to[0]->getName());
     $this->assertEquals('*****@*****.**', $to[0]->getEmailAddress()->getEmail());
     $cc = $email->getRecipients(EmailRecipient::CC);
     $this->assertEquals('"Test2" <*****@*****.**>', $cc[1]->getName());
     $this->assertEquals('*****@*****.**', $cc[1]->getEmailAddress()->getEmail());
     $this->assertEquals('*****@*****.**', $cc[2]->getName());
     $this->assertEquals('*****@*****.**', $cc[2]->getEmailAddress()->getEmail());
     $bcc = $email->getRecipients(EmailRecipient::BCC);
     $this->assertCount(0, $bcc);
 }
Ejemplo n.º 4
0
 /**
  * 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;
 }
 /**
  * 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;
 }