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;
 }
 public function testOrigin()
 {
     $storage = array();
     $origin = $this->getMockBuilder('Oro\\Bundle\\EmailBundle\\Entity\\EmailOrigin')->getMock();
     $origin->expects($this->any())->method('getId')->will($this->returnValue(1));
     $this->batch->expects($this->never())->method('getOrigin');
     $this->batch->expects($this->exactly(2))->method('addOrigin')->will($this->returnCallback(function ($origin) use(&$storage) {
         $storage[$origin->getId()] = $origin;
     }));
     $result = $this->builder->setOrigin($origin);
     $this->assertEquals(1, $result->getId());
     $this->assertTrue($result === $this->builder->setOrigin($origin));
 }
Ejemplo n.º 3
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;
 }