/** * 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 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); } }
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); }
/** * 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; }